Forum: Klatsch und Tratsch
by Sir Rufo,
14. Okt 2015
Das Problem kenne ich auch - darum habe ich es ja auch intern anders gemacht ;)
So ist es maximal langsam (ohne Sleep zu verwenden):
procedure Slow<T>( values: array of T; Action: TProc<T> );
var
v: T;
begin
for v in values do // eine Kopie wird in v geschoben
Action( v ); // v wird nochmal kopiert und dann erfolgt der Aufruf
Forum: Klatsch und Tratsch
by Sir Rufo,
14. Okt 2015
Für 1.000.000 fette Records in einem Array benötigen die Aufrufe (von allen Records) 8ms - soviel Zeit habe ich so gerade noch :)
Mit mehr habe ich es nicht getestet, weil die Records so fett waren, dass der verfügbare Speicher nicht mehr ausreichte ;)
Aber mit einem for in habe ich das auch getestet - das hat mir aber zu lange gedauert (>>1 Sekunde)
Forum: Klatsch und Tratsch
by Sir Rufo,
14. Okt 2015
Nein, natürlich nicht ... aber wenn man einem Feature X hinterherweint, dann muss man wohl wechseln oder sich mit dem arrangieren/vertraut machen was möglich ist.
Ich bin allerdings faul, und möchte auch nicht ständig irgendwo Variablen deklarieren nur weil ich durch ein Array laufen muss. Dann schreibe ich mir eben einen TArray.ForEach<T>(Action:TAction<T>) und kann mir diese Hilfsvariablen...
Forum: Klatsch und Tratsch
by Sir Rufo,
14. Okt 2015
Nun ja, mit ein bisschen Generics und Closures bekommt man so etwas hin
&With.Block<string, Integer>(
'foo',
10,
procedure( const s: string; const n: Integer )
var
i: Integer;
sum: Integer;
begin