Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#50

AW: Ini-Inhalt geht in sehr seltenen Fällen verloren (TMemIniFile)

  Alt 12. Jan 2016, 11:53
Ehrlich gesagt finde ich die Diskussion über die Geschwindigkeit langsam absurd:

Wenn es um's Messen der Schreibgeschwindigkeit geht, dann bitte auch nur das Schreiben messen:
Delphi-Quellcode:
var
  ini : TMemIniFile;
  i : Integer;
  dtStart : TDateTime;
  dtEnde : TDateTime;
begin
  ini := TMemIniFile.Create(txtFileName.Text);
  try
    for i := 0 to rbgValues.Tag-1 do
     ini.WriteString(txtSection.Text+IntToStr(i), txtIdent.Text+IntToStr(i), RandomPassword(30));
    dtStart := Now;
    ini.UpdateFile;
    dtEnde := Now;
  finally
    ini.Free;
  end;
    // Hier bitte die Startzeit von der Endezeit abziehen und nicht andersherum.
    // Sonst bekommt man eine negative Zeit, der man einfach das Vorzeichen nimmt und dann suggeriert, man habe eine positive Zeitdifferenz ;-)
    memLog.Lines.Add('MEM (' + IntToStr(rbgValues.Tag) +'): '+FormatDateTime('ss.zzz',dtEnde - dtStart)+'sec');
Hieraus kann ich nicht entnehmen, dass hier irgendwas ein vielfaches von was anderem dauert:
Code:
-> In der Ausgangslage ist keine Ini-Datei vorhanden
MEM (1000): 00:163sec
MEM (1000): 00:035sec
MEM (1000): 00:024sec
MEM (1000): 00:033sec
-> Hier Ini-Datei gelöscht
MEM (1000): 00:161sec
MEM (1000): 00:023sec
MEM (1000): 00:015sec
MEM (1000): 00:021sec
Beim Ersten gibt es eine Durchschnittszeit von 63,75 ms, beim Zweiten sind es 55 ms.

Auf olympische Wettkämpfe übertragen ergibt das (gerundet) einen Unterschied von 9 hunderstel Sekunden zwischen dem Sieger und dem Zweitplazierten.

Mir scheint, dass dann, wenn eine INI-Datei vorhanden ist, alles "wesentlich" schneller zu sein, als wenn keine INI-Datei vorhanden wäre.

Diese Zeitunteschiede können schon allein dadurch entstehen, dass beim Schreiben der Schreibkopf der Platte zufällig an eine anderen Position war.

Betrachtet man die jeweils ersten Messungen Deiner Messreihen, so beträgt die Zeitdifferenz immerhin immense 2 tausendstel Sekunden.
Ausserdem kann man an den Werten der Messreihen erkennen, dass nach der ersten Messung der Cache sehr stark "zuschlägt". Wann die Daten letztlich physikalisch auf der Platte landen, läßt sich durch Deine Messungen nicht feststellen.

Die Zeitunterschiede, die Du gemessen hast, sind bereits durch die möglichen Differenzen, die sich aus der durchschnittlichen Zugriffszeit der Festplatte ergeben können, vollständig erklärbar.

Schreibst Du da eigentlich ein Programm, das eine Echtzeitverarbeitung durchführt oder eine Anwendung für einen Anwender, der einfach damit arbeiten soll?

Beim Ersteren mögen Deine Bedenken eventuell noch nachvollziehbar sein, beim Zweiten halten ich sie für absolut übertrieben.

Die Zeitunterschiede sind so kurz, dass Du sie als Anwender nicht bemerken kannst. Das menschliche Wahrnehmungsvermögen ist für so kurze Zeitdifferenzen nicht geeignet.
  Mit Zitat antworten Zitat