![]() |
Random() zu langsam?
Hallo, ich möchte eine möglichst große Anzahl an Zufallszahlen generieren, mein Problem ist jedoch die Dauer die das Programm dafür benötigt. Das Auslesen des Arrays in eine TListBox geht mittlerweile sehr schnell dank .BeginUpdate.
Das reine füllen des Arrays dauert aber viel zu lange. Schon für 100.000 Zahlen brauch er 1min 30sek. Und ich kann mir nicht helfen warum.
Delphi-Quellcode:
Man sagte mir ich soll .NET deaktivieren, ich hab leider keine Idee wie ich das machen soll, noch ob es überhaupt etwas bringt. Ich benutze Delphi 2005 Prof.
procedure TFach.generate;
var i : Integer; begin SetLength(Items, Number+1); for i := 0 to Number do begin Items[i] := Random(Number)+1; end; end; |
DP-Maintenance
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Delphi-Frage |
Re: Random() zu langsam?
lol? Folgender Code benötigt nicht einmal eine Millisekunde:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE} uses SysUtils, Windows, DateUtils; const n = 100000; var i: Integer; Start: Cardinal; Data: array of Integer; begin Start := GetTickCount; Randomize; SetLength(Data, n); for i := 0 to n - 1 do Data[i] := Random(n); Writeln(GetTickCount - Start); Readln; end. Zitat:
|
Re: Random() zu langsam?
Zitat:
dein "Lachen" mag ja lustig sein.... aber sage dem Fragesteller doch bitte auch warum Du das machst! Alles andere ist nämlich unnötig. Danke :stupid: |
Re: Random() zu langsam?
Es ist *nicht* ratsam, ständig neuen Speicher zu reservieren. (mit SetLength)
Besser einmal reservieren und dann so lassen. |
Re: Random() zu langsam?
Zitat:
|
Re: Random() zu langsam?
Zitat:
Vermutlich benötigen andere Code-Teile so lange. |
Re: Random() zu langsam?
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab es jetzt mal seperat direkt auf einem Button ausprobiert. Da waren es 6 Sekunden für 1.000.000 Zahlen. Ich hab es wohl irgendwo mit meiner schlechten OOP vergeigt. Trotzdem hab ich das gefühl 6 Sekunden sei zu langsam. Im IRC hat man mir 16-17ms gesagt, bräuchten sie. Selber Quellcode.
Ich versuch erstmal das ganze flüssiger zu machen, ich häng mal mein Projekt an. Ich erwarte nicht, dass das jemand durchguckt. Aber vielleicht sieht ja jemand direkt auf Anhieb etwas, was auf garkeinen Fall sein darf. :P |
Re: Random() zu langsam?
Die Ursache für die schlechte Performance ist TListBox.Items.
Die Klasse ist zwar von TStrings abgeleitet, speichert seine Daten aber nicht selbst, sondern per Windows Messages im darunterliegenden Control. Das Versenden von hundertausenden Messages braucht eben Zeit. Abhilfe: Daten in einer TStringList erzeugen und dann mit Assign auf die TListbox kopieren. |
Re: Random() zu langsam?
Okay, danke für den Tipp. Werd eich beachten. Die Fehlerursache liegt bei der zeitmessung. Ich war so KLUK 'QueryPerformanceFrequency' zu benutzten statt GetTickCount. Das war die ultimative Performance Bremse. Jetzt erreiche ich endlich die Werte die ich haben möchte. :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz