Het viel me onlangs op dat de volgende iteratie (pseudo) veel geheugen gebruikt:
Ook deze oplossing gebruikt (evenveel) geheugen:
Terwijl dit vele malen minder geheugen gebruikt (door de berekening te vervangen door de uitkomst):
De waarden 5000 en 3400 zijn variabel, echter wijzigen binnen de iteratie niet. Ik heb het idee dat in voorbeeld B de calculatie "berekening" 10000*10000 maal uitgevoerd wordt (en daardoor geheugen vreet), ondanks het feit dat ik het in een variabele stop van te voren.
Kan iemand me in het kort uitleggen hoe ik dit proces kan optimaliseren, en de waarden 5000 en 3400 dynamisch (dat wil zeggen: dynamisch voordat de iteratie begint) kan houden? Ik snap niet goed hoe actionscript dit afhandelt; daaarbij geloof ik graag dat dit niet alleen voor AS maar ook voor andere talen geldt.
Bedankt.
PS Het probleem zit hem niet in doSomethingEasy. Wat daar gebeurt is irrelevant; het probleem focust zich op de berekening van "berekening".
code:
1
2
3
4
5
6
| // voorbeeld A for(var i:int = 0; i < 10000; i++) { for(var y:int = 0; y < 10000; y++) { doSomethingEasy((5000 + 3400) / 2); } } |
Ook deze oplossing gebruikt (evenveel) geheugen:
code:
1
2
3
4
5
6
7
| // voorbeeld B var berekening:Number = (5000 + 3400) / 2; for(var i:int = 0; i < 10000; i++) { for(var y:int = 0; y < 10000; y++) { doSomethingEasy(berekening); } } |
Terwijl dit vele malen minder geheugen gebruikt (door de berekening te vervangen door de uitkomst):
code:
1
2
3
4
5
6
7
| // voorbeeld C var berekening:Number = 4200; // = (5000 + 3400) / 2; for(var i:int = 0; i < 10000; i++) { for(var y:int = 0; y < 10000; y++) { doSomethingEasy(berekening); } } |
De waarden 5000 en 3400 zijn variabel, echter wijzigen binnen de iteratie niet. Ik heb het idee dat in voorbeeld B de calculatie "berekening" 10000*10000 maal uitgevoerd wordt (en daardoor geheugen vreet), ondanks het feit dat ik het in een variabele stop van te voren.
Kan iemand me in het kort uitleggen hoe ik dit proces kan optimaliseren, en de waarden 5000 en 3400 dynamisch (dat wil zeggen: dynamisch voordat de iteratie begint) kan houden? Ik snap niet goed hoe actionscript dit afhandelt; daaarbij geloof ik graag dat dit niet alleen voor AS maar ook voor andere talen geldt.
Bedankt.
PS Het probleem zit hem niet in doSomethingEasy. Wat daar gebeurt is irrelevant; het probleem focust zich op de berekening van "berekening".
[ Voor 4% gewijzigd door Verwijderd op 06-10-2011 12:49 . Reden: Uitleg over doSomethingEasy gegeven. ]