Hallo, ich habe mal eine Prinzipfrage da ich nicht weiß, wie ich ich mein Problem am besten lösen kann. Ich habe mit C# eine Prüfsoftware geschrieben die mir über 4...5h hinweg jede Sekunde ein paar Messwert liefert. Diese Messwerte möchte ich nun in eine csv schreiben was auch klappt. Momentan warte ich in der Software bis ich einen Messwert bekomme und schreibe in sofort in die Datei. Wenn ich nun aber 5x in der Sekunde, über Stunden hinweg, ständig die Datei schreibe/erweitere, habe ich ja eine Unmenge an Schreibzyklen. Macht das dem Speichermedium etwas aus? (derzeit hdd, später vlt. mal flash) Also habe ich überlegt ob ich nicht die Messwerte in einen Buffer schreiben soll und dann immer z.b. 100 Messwerte auf einmal zu schreiben - das wiederum benötigt ja aber mehr RAM (wobei 1000 Messwerte a 4 Byte ja in heutigen Zeiten ein "Witz" sind!) Wie machen das nun die Profis!? wirklich jeden Messwert einzeln schreiben oder aber in einem arry zwischenpuffern - und warum ist die eine Lösung besser als die andere? hoffe Ihr könnt mir weiter helfen! Grüße Micha
Du beantwortest doch deine Frage schon von sich aus. Wenn du zukünftig einen Flash-Speicher verwenden solltest, wäre Page-Write Prinzip am sinnvollsten. >habe ich ja eine Unmenge an Schreibzyklen. >Macht das dem Speichermedium etwas aus? (derzeit hdd, später vlt. mal flash Zu HDD kann ich nciht viel sagen, aber dem Flash macht es schon was aus. Die Schreibzyklen sind begrenzt (wenn du auf die gleiche Adresse immer wieder schreibst). Soll der Speicher ~unendlich Mal überschreibbar sein, eignet sich da eher ein FRAM. Kannst aber das Datenblatt vom Flash angucken und ausrechnen ob dein Prüfgerät beim vollen Einsatz die Garantiezeit überlebt :), denn Flash's sind um einiges billiger als die FRAM's.
Das Betriebssystem selbst hat die Aufgabe, diese Zugriffe bestmöglichst umzusetzen. Windows und Linux legen selber einen Puffer dafür an. Deshalb gibt es ja die "Flush"-Funktionen.
Micha schrieb: > Wie machen das nun die Profis!? wirklich jeden Messwert einzeln > schreiben oder aber in einem arry zwischenpuffern Das Betriebssystem buffert normalerweise ja schon von sich aus. Die eigentliche Frage lautet: Was passiert wenn das System zwischendurch abschmiert und die gebufferten Daten verloren gehen ehe sie es aufs Medium schaffen. Macht das was oder ist das egal.
das is nicht so tragisch wenn mir die letzten paar Daten verloren gehen, dann müsste ich den letzten Teil der Messung eben nochmal starten. Die jetztige Prüfsoftware und der dazugehörige Rechner laufen aber derzeit stabil. Abstürzen tut es nur wenn, die Putzfrau Abends kommt und den PC aussteck... ...damit der Staugsauger in die Steckdose eingesteckt werden kann :-))) Dass Windows zwischendurch puffert wußte ich nicht, spielt da eignetlich die Programmiermgebung eine Rolle? Benütze C# auf VS Express 2008 Mir fehlt da eben die Erfahrung was "viel" Schreibzyklen sind! - Hauptsächlich wird sicherlich auf HDD geschrieben, und da frage ich mich eben ob der (deutliche) Mehraufwand fürs pagewrite gerechtfertigt ist.
Nachdem Du als Autor der Software nicht sicher weißt, was der User jetzt und in aller Zukunft dann damit macht, würde ich in jedem Fall die Daten zwischenspeichern und in größeren Blöcken auf den Datenträger schreiben. z. B. meinst Du jetzt, daß die Daten nur auf die HD geschrieben werden. Die hält das problemlos aus. Aber was ist, wenn der nächste User sich das Logfile einfach direkt auf den USB-Stick schreiben lässt? Auch das ist ein Flash-Speicher mit beschränkter Anzahl von Zyklen. Selbst nach der Pufferung durch das Betriebssystem kommt da noch eine bedenkliche Anzahl von Schreibzyklen zustande.
Hartmut schrieb: > würde ich in jedem Fall die Daten > zwischenspeichern und in größeren Blöcken auf den Datenträger schreiben für sowas gibt es bufferd streams, wenn ich mich recht erinnere
Also ich würde einfach reinschreiben und fertig, soll sich doch das Betriebssystem darum kümmern. Bei Festplatten brauchst Du Dich nicht um die Schreibzyklen zu kümmern. Ich vermute mal, dass Deine Anwendung aber sowieso völlig unkritisch ist, auch für Flashspeicher. Denn die Datei wird ja nur ständig ergänzt und nicht immer wieder komplett neu erstellt. Einen Puffer braucht es nur dort wo Deine Messdaten reinkommen, denn es kann zwischendurch schon mal vorkommen, dass Windows ein wenig beschäftigt ist und die Daten vielleicht nicht so schnell speichern kann wie Du möchstest. Als Alternative zur Datei könntest Du die Daten auch in eine Datenbank schreiben die sich auf demselben PC oder im Netzwerk befindet. Da sind auch von Haus aus genügend Mechanismen vorhanden um Probleme zu vermeiden. Aber wie gesagt, das mit der Datei passt schon und einfach laufend reinschreiben/ergänzen sollte kein Problem sein.
> Ich vermute mal, dass Deine Anwendung aber sowieso völlig unkritisch > ist, auch für Flashspeicher. Denn die Datei wird ja nur ständig ergänzt Aber die Dateigröße wird irgendwo im Filesystem immer an der gleichen Stelle geschrieben wenn du deinen Datenträger nicht mit einem geeigneten Filesystem formatiert hast oder der Controller selbst intelligent genug ist, dass ers verteilt. Trotzdem: Das ist alles nicht deine Aufgabe. Das Puffern sollte das Betriebssystem machen. Oder die Laufzeitbibliothek. Vielleicht musst du noch was konfigurieren.
Micha schrieb: > Wie machen das nun die Profis!? wirklich jeden Messwert einzeln > schreiben oder aber in einem arry zwischenpuffern - und warum ist die > eine Lösung besser als die andere? Hallo Micha, das ist ziemlich egal: der Dateisystemtreiber puffert die Daten, das System verwaltet einen generellen Hard Disk Cache und auf der Festplatte werden die Daten auch erst in einen Buffer geschrieben - das sind also mindestens 3 hintereinander, da kommt es auf deinen Buffer nicht mehr wirklich an. Viel schwieriger ist es, dafür zu sorgen, dass die Daten unverzüglich auf dem Medium landen, das lohnt sich aber auch selten. Ich würde höchstens eine oder ein paar Sekunden puffern. Gruss Reinhard
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.