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 2 von 2     12   
Benutzerbild von brinkee
brinkee

Registriert seit: 27. Aug 2004
60 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Random() zu langsam?

  Alt 4. Okt 2007, 20:08
Hehe, das ist natürlich gut
Markus Brinkmann
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#12

Re: Random() zu langsam?

  Alt 4. Okt 2007, 20:11
Zitat von Kuonrat:
Ich war so KLUK 'QueryPerformanceFrequency' zu benutzten statt GetTickCount. Das war die ultimative Performance Bremse.
Das halte ich für ein Gerücht. Selbst in einer VM braucht ein Aufruf von QueryPerformance* nur jeweils drei Mikrosekunden.
  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
 
#13

Re: Random() zu langsam?

  Alt 4. Okt 2007, 20:32
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;
Hab mich wohl versehen, das auf den ersten Blick so ausgesehen, als würde er generate sehr oft aufrufen und dabei jedesmal neuen Speicher reservieren. Ich sollte wohl genauer hinschauen.
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
Kuonrat

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

Re: Random() zu langsam?

  Alt 4. Okt 2007, 20:46
Zitat von Dax:
Zitat von Kuonrat:
Ich war so KLUK 'QueryPerformanceFrequency' zu benutzten statt GetTickCount. Das war die ultimative Performance Bremse.
Das halte ich für ein Gerücht. Selbst in einer VM braucht ein Aufruf von QueryPerformance* nur jeweils drei Mikrosekunden.
Okay, es mag eher daran gelegen haben, das ich die Zeit des gesammten Buttons gemessen habe. Dadurch zieht sich auch die Progressbar hinaus. Umklammer ich nur das Generieren an sich, erhalte ich selbige Werte.
Was soviel bedeutet, dass ich weiterhin am Auslesen in der GUIa rbeiten muss.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#15

Re: Random() zu langsam?

  Alt 4. Okt 2007, 20:48
Nein, das bedeutet, dass du deine Daten nicht in der GUI speichern solltest, denn dafür ist die GUI nicht gemacht worden
  Mit Zitat antworten Zitat
Kuonrat

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

Re: Random() zu langsam?

  Alt 4. Okt 2007, 21:03
Na meine Daten sind doch zur Zeit im Array, welches sich in der Fachklasse TFach befindet. Auslesen tat ich mit einer Schleife. Und das wollte ich jetzt so ändern, dass die Daten in TStringList gespeichert werden und mittels List.Assign anfügen. Oder hab ich das falsch verstanden?
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#17

Re: Random() zu langsam?

  Alt 4. Okt 2007, 21:19
Hallo,

du hast die Zahlen doch bereits in einem Array abgelegt, warum dann noch einmal in einer Stringliste und anschließend in der ListBox? Du kannst eine TListBox im virtuellen Modus betreiben (ListBox.Style = lbVirtual). Für jedes Element wird dann ein OnData-Ereignis ausgelöst, in dem du die anzuzeigenden Daten bereitstellen mußt.

Wie bist du eigentlich auf die Idee gekommen, 100000+ Elemente in einer Listbox darzustellen? Das Scrollen (und genaue Positionieren) in einer solchen Datenmenge macht keinen Spaß.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Kuonrat

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

Re: Random() zu langsam?

  Alt 4. Okt 2007, 21:23
Ich möchte nur zahlen generieren, diese mit verschiedenen verfahren sortieren, und die benötigte zeit vergleichen.
  Mit Zitat antworten Zitat
Kuonrat

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

Re: Random() zu langsam?

  Alt 4. Okt 2007, 23:22
Zitat von shmia:
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.
Hab ich ausprobiert, dauer exakt genauso lang.
  Mit Zitat antworten Zitat
shmia

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

Re: Random() zu langsam?

  Alt 5. Okt 2007, 09:54
Zitat von Kuonrat:
Zitat von shmia:
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.
Hab ich ausprobiert, dauer exakt genauso lang.
Du hast recht; hier meine Messwerte zum Füllen mit 100000 Strings à 4 Zeichen:
Code:
TStringList: 62ms
TMemo:     11.1s
TListBox:  1.75s
man sieht, dass TStringList um Welten schneller ist.
Es dauert allerdings gleich lang, wenn man eine TListBox direkt befüllt oder zuerst TStringList befüllt und dann auf TListbox "assigned".
(eigentlich logisch; in beiden Fällen müssen 100000 Messages verschickt werden)
ABER: wenn man auf die Strings zugreift um z.B. sie zu sortieren, dann macht das einen Unterschied
von Faktor 30 ob man den Sortiervorgang auf einer StringList ausführt oder auf TListBox.Items.
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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:41 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