Datei ohne Stream öffnen

colblake

Erfahrenes Mitglied
Hallo,

ich habe ein Programm, dass schnell hintereinander etwas an eine Datei anhängt. (Die Datei öffne ich mit FileStream) Nun möchte ich das Programm schneller machen und hab über den Leistungsassistenten einen test durchführen lassen. Das Ergebnis hatt mich doch sehr erstaunt. 95% der Zeit verbrauch mein Programm in der Stream.Close() Methode.

Die Datei immer oder länger offen zu lassen ist keine Alternative! Es ist eine Anforderung, dass nach jedem Intervall (~funktionsaufruf) eine konsistente Datei vorhanden sein muss.

Deshalb meine Frage: Kann man eine Datei in vc# ander als mit Streams öffen?

hier noch meine Funktion die schnell hintereinander aufgerufen werden muss:

C#:
		private void InsertFile(...)
		{
			FileStream fileStream = null;

			try
			{
...
				fileStream = new FileStream(GetFileName(), FileMode.Open);
				...
				fileStream.Seek(...);
				fileStream.Write(...);
				fileStream.Write(...);
				fileStream.Flush();
				
			}
			catch (Exception ex)
			{
				Console.WriteLine(ex.Message);
				throw;
			}
			finally
			{
				if (fileStream != null)
					fileStream.Close();
			}
		}


Gruß
Col.Blake
 
Zuletzt bearbeitet:
Hi.
ich habe ein Programm, dass schnell hintereinander etwas an eine Datei anhängt. (Die Datei öffne ich mit FileStream) Nun möchte ich das Programm schneller machen und hab über den Leistungsassistenten einen test durchführen lassen. Das Ergebnis hatt mich doch sehr erstaunt. 95% der Zeit verbrauch mein Programm in der Stream.Close() Methode.
I/O ist nunmal meist die langsamste Komponente im System.
Die Datei immer offen zu lassen ist keine Alternative!
Warum?
Deshalb meine Frage: Kann man eine Datei in vc# ander als mit Streams öffen?
Du könntest sicherlich über P/Invoke direkt die WinAPI benutzen, ob das dann aber schneller ist...

Warum öffnest du denn den Stream eigentlich nicht im Append Modus?

Gruß
 
Hallo colblake,

du könntest die Datei im Modus Lesen & Schreiben öffnen und permanent geöffnet lassen. Bei jeder Schreiboperation kannst du die Datei vorher vollständig oder partiell sperren und danach wieder entsperren. Die FileStream-Klasse stellt dafür die Methoden Lock() und Unlock() bereit.

Gruß
MCoder
 

Neue Beiträge

Zurück