AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Random() zu langsam?

Ein Thema von Kuonrat · begonnen am 4. Okt 2007 · letzter Beitrag vom 5. Okt 2007
Antwort Antwort
Seite 1 von 2  1 2      
Kuonrat

Registriert seit: 27. Okt 2006
Ort: Berlin
33 Beiträge
 
#1

Random() zu langsam?

  Alt 4. Okt 2007, 18:43
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:
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;
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.
  Mit Zitat antworten Zitat
4. Okt 2007, 18:46
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Delphi-Frage
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#3

Re: Random() zu langsam?

  Alt 4. Okt 2007, 19:09
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 von Kuonrat:
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.
Das Projekt ist aber schon Delphi.Win32 und nicht Delphi.Net, oder?
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Random() zu langsam?

  Alt 4. Okt 2007, 19:13
Zitat von Khabarakh:
lol?
Hai Kraberakh,

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
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Random() zu langsam?

  Alt 4. Okt 2007, 19:14
Es ist *nicht* ratsam, ständig neuen Speicher zu reservieren. (mit SetLength)

Besser einmal reservieren und dann so lassen.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#6

Re: Random() zu langsam?

  Alt 4. Okt 2007, 19:16
Zitat von 3_of_8:
Es ist *nicht* ratsam, ständig neuen Speicher zu reservieren. (mit SetLength)

Besser einmal reservieren und dann so lassen.
Hast Du mehr gesehen als ich? Wo wird denn ständig neuer Speicher reserviert?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Random() zu langsam?

  Alt 4. Okt 2007, 19:18
Zitat von Sharky:
aber sage dem Fragesteller doch bitte auch warum Du das machst!
Sebastians Code unterscheidet sich eigentlich nicht vom Code des Fragestellers bis auf die winzige Addition, die jedoch nicht so ins Gewicht fallen kann. Ich denke, daher lacht er.

Vermutlich benötigen andere Code-Teile so lange.
  Mit Zitat antworten Zitat
Kuonrat

Registriert seit: 27. Okt 2006
Ort: Berlin
33 Beiträge
 
#8

Re: Random() zu langsam?

  Alt 4. Okt 2007, 19:33
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.
Angehängte Dateien
Dateityp: rar psort_151.rar (194,2 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: Random() zu langsam?

  Alt 4. Okt 2007, 19:37
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.
Andreas
  Mit Zitat antworten Zitat
Kuonrat

Registriert seit: 27. Okt 2006
Ort: Berlin
33 Beiträge
 
#10

Re: Random() zu langsam?

  Alt 4. Okt 2007, 20:06
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz