INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Performance-Frage: Was ist klüger?



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

17.08.2011, 09:13
Beitrag #1

Cluster5020 Offline
LVF-Grünschnabel
*


Beiträge: 17
Registriert seit: Mar 2011

10.0 @32bit
2011
EN


Oesterreich
Performance-Frage: Was ist klüger?
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
17.08.2011, 09:20
Beitrag #2

GerdW Online
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Performance-Frage: Was ist klüger?
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)...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.08.2011, 09:24
Beitrag #3

Cluster5020 Offline
LVF-Grünschnabel
*


Beiträge: 17
Registriert seit: Mar 2011

10.0 @32bit
2011
EN


Oesterreich
RE: Performance-Frage: Was ist klüger?
Vielen Dank für die super und sehr schnelle Antwort Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.08.2011, 09:27
Beitrag #4

dimitri84 Offline
Astronaut
*****


Beiträge: 1.496
Registriert seit: Aug 2009

2020 Developer Suite
2009
DE_EN

53562
Deutschland
RE: Performance-Frage: Was ist klüger?
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?

„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.08.2011, 09:32 (Dieser Beitrag wurde zuletzt bearbeitet: 17.08.2011 09:36 von Lucki.)
Beitrag #5

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Performance-Frage: Was ist klüger?
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".
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.08.2011, 12:56
Beitrag #6

Cluster5020 Offline
LVF-Grünschnabel
*


Beiträge: 17
Registriert seit: Mar 2011

10.0 @32bit
2011
EN


Oesterreich
RE: Performance-Frage: Was ist klüger?
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)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  SQL Server Performance danielsan 7 6.594 29.09.2009 09:47
Letzter Beitrag: danielsan

Gehe zu: