Frage

ich einige lange Simulationen mache, die von mehreren Stunden bis zu mehreren Tagen dauern kann, und ich bin die Anmeldung der Informationen in Dateien. Die Dateien können Größen von mehreren Hundert Megabit erreichen und im Inneren gibt es nur eine Liste von Zahlen. Ich bin wirklich besorgt über die Overhead, dass dieser Ursprung ist. Ich mag fragen, ob der Aufwand der Verwendung dieser Methode wirklich groß ist, und wenn es eine andere effizientere Methode ist das gleiche zu tun, nur Informationen protokollieren.

Ich bin mit C ++ und die Dateien zu protokollieren benutze ich nur die gängigen Methoden fprintf. Um den Aufwand zu erklären, wenn Sie ein praktisches Beispiel ähnlich geben, indem Dateien, die er diese Zeit in Anspruch nimmt, ohne sie zu dieser Zeit verwendet wird, das wird im Idealfall.

habe ich einigen Test, aber ich habe keine Ahnung, ob das Kopf lineally mit der Größe der Dateien wächst. Was ich sagen will ist, dass vielleicht nicht das gleiche ist, eine Linie in eine Datei mit einer Größe von 1 MB als eine Datei mit einer Größe von 1 GB hinzuzufügen. Wer weiß, wie der Aufwand mit der Größe der Datei wachsen?.

War es hilfreich?

Lösung

Sie müssen nur einige Back-of-the-Umschlag Berechnungen, denke ich.

Lassen Sie "Hunderte von Mb" 400MB sein.
Lassen Sie „mehrere Stunden bis mehrere Tage“ 48 Stunden sein.

(400 * 1024 * 1024 Bytes) / (3600 * 48 Sekunden) = 2427 Byte / s

Natürlich können Sie nur Ihr System beobachten oder reelle Zahlen für die Berechnung verwenden, aber die grobe Schätzung unter Verwendung der oben Sie 2 KB / s sind die Anmeldung, die die durchschnittlichen Festplattengrenzen im Vergleich ziemlich trivial ist.

Also, nein, der Overhead erscheint nicht sehr groß zu sein. Und ja, es gibt effizientere Möglichkeiten, es zu tun, aber Sie würden wahrscheinlich mehr Zeit und Mühe aufwenden, dass es für die miniscule Einsparungen lohnen Sie bekommen, wenn Sie Ihre Zahlen sind sehr unterschiedlich von dem, was Sie gesagt.

Andere Tipps

„Hunderte von Megabytes“ ist wahrscheinlich irrelevant im Laufe von ein paar Tagen. Hunderte von Gigabyte könnten durchaus von Bedeutung sein, aber wahrscheinlich immer noch nicht sehr groß sein.

Es ist offensichtlich, dass die Art und Weise, obwohl die Antwort für Ihre genaue Anwendung herauszufinden: eine Simulation läuft mit Protokollierung eingeschaltet, und die Zeit es. Dann ist es läuft (mit dem gleichen Eingang) mit Protokollierung ausgeschaltet, und die Zeit es. Vergleichen Sie den Unterschied. Idealerweise tun dies mehrmals andere Störungen entgegenzuwirken. Ich vermute, Sie werden feststellen, dass der potenziellen Nutzen von vielen erheblich schwerer wiegt als die Performance-Einbußen zu protokollieren.

Sie können Daten in STL-Vektor setzen und eine Profilierung auf Ihren Daten gemacht, wie:
- wiederholte Linien auszunehmen;
- nur Unterschiede speichern;
- flush Daten nach ein paar Mal;
- spezifische Daten auswählen zu speichern;
- etc ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top