LabVIEWForum.de
Performance-Frage: Was ist klüger? - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenbank & File IO (/Forum-Datenbank-File-IO)
+---- Thema: Performance-Frage: Was ist klüger? (/Thread-Performance-Frage-Was-ist-klueger)



Performance-Frage: Was ist klüger? - Cluster5020 - 17.08.2011 09:13

Hallo.

Ich bin an einer Stelle angelangt, wo ich mich frage, was die ressourcenschonendere Variante ist.

* Im Prinzip gehts um viel Text der in eine Datei geschrieben werden soll.
* Der Text sammelt sich an, mit jedem Schleifendurchlauf eine Zeile mehr (sind schnell paar Tausend)

Nun die Frage. Ist es besser das ganze nach Abfertigung der Schleife in eine Datei zu schreiben und den Text in der Loop immer durchzuschleifen?
Oder ist es klüger einen Datenstream vor der Schleife zu öffnen und jede Zeile sofort in die Datei zu schreiben?

Vielen Dank schonmal Smile


RE: Performance-Frage: Was ist klüger? - GerdW - 17.08.2011 09:20

Hallo Cluster,

klüger ist es, den Datenstrom fortlaufend zu speichern (bei den von dir erwarteten Datenmengen, wobei die Anzahl der Zeilen nur bedingt etwas über Dateigröße und Speicherbedarf aussagt...): so sind deine Daten (fast) immer sicher auf der Festplatte, bevor dein Programm evtl. abstürzt!

Zitat:den Text in der Loop immer durchzuschleifen?
Ist ähnlich ineffizient wie das Aufbauen großer Arrays in einer Schleife - Texte sind auch nur 1D-Arrays of U8...

Zitat:jede Zeile sofort in die Datei zu schreiben?
Ist mMn am sichersten...

Mittelweg:
Buffer anlegen, der eine bestimmte Anzahl Zeilen zwischenspeichert (z.B. 10 Zeilen). Diesen Buffer dann regelmäßig in die Datei schreiben. Grundidee: limitierter Speicherbedarf, trotzdem regelmäßige Datensicherung, trotzdem nicht dauernd Festplattenzugriffe (die recht lange dauern können)...


RE: Performance-Frage: Was ist klüger? - Cluster5020 - 17.08.2011 09:24

Vielen Dank für die super und sehr schnelle Antwort Smile


RE: Performance-Frage: Was ist klüger? - dimitri84 - 17.08.2011 09:27

Also sicherer ist es wohl, wenn du jede Zeile einzeln schreibst, denn wenn das Programm abstürtzt und du noch nix geschrieben hast, sind die Daten futsch. Außerdem kannst du nicht ewig Durchschleifen, wenn der Text immer größer wird ... Sowas ist immer eine Fehlerquelle für "Speicher voll".

Du kannst aber auch beim Zeilenweise schreiben LV das Leben etwas erleichtern (wahrscheinlich), indem du das Schreiben in einer parallelen Schleife bewerkstelligst. Einfach mit ner Queue die Strings in die Schreib-Schleife schicken. So kann LV eine seiner Stärken ausspielen und parallel arbeiten.

Hast du denn jetzt Performanceprobleme?


RE: Performance-Frage: Was ist klüger? - Lucki - 17.08.2011 09:32

Man muß bei der Abwägung der beiden Varianten eines wissen:
Windows und selbst die Festplatte, auf die die Datei geschrieben wird, sind bereits sehr klug. Es erfolgt also keineswegs bei einer geöffneten Datei wegen des Schreiben einzelner Bytes jedesmal ein zeitintensiver physikalischer Zugriff auf die Platte, sondern dazwischen liegen Puffer, die wie schon gesagt irgenwie klug verwaltet werden.
Daruf würde ich mich erst mal verlassen und der memoryschonenden und einfacher zu programmierenden zweiten Variante den Vorzug geben.
Edit: Den von Gerd vorgeschlagenen "Mittelweg" muß man nicht extra programmieren - die ist im Windows-Betriebsystem und/oder in der Festplatte schon "vorinstalliert".


RE: Performance-Frage: Was ist klüger? - Cluster5020 - 17.08.2011 12:56

Vielen Dank Smile

Zitat:Hast du denn jetzt Performanceprobleme?
Nein, die Schaltung wird nur alle 5 Sekunden aufgerufen, möchte sie aber so robust und performant wie möglich gestalten. (Zielsystem ist langsamer als das Programmier-System)