tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
334
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von colblake
    colblake colblake ist offline Mitglied Gold
    Registriert seit
    Jan 2004
    Ort
    dresden
    Beiträge
    214
    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:

    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
     
            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
    Geändert von colblake (24.08.10 um 14:38 Uhr)
     
    Über so viele Sachen wächst Gras , man kann keiner Wiese mehr trauen.

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    7.983
    Hi.
    Zitat Zitat von colblake Beitrag anzeigen
    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.
    Zitat Zitat von colblake Beitrag anzeigen
    Die Datei immer offen zu lassen ist keine Alternative!
    Warum?
    Zitat Zitat von colblake Beitrag anzeigen
    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ß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    Avatar von colblake
    colblake colblake ist offline Mitglied Gold
    Registriert seit
    Jan 2004
    Ort
    dresden
    Beiträge
    214
    Zitat Zitat von deepthroat Beitrag anzeigen
    ...
    Warum?
    Habe oben nochmal editiert, nur du warst schneller mit deiner Antwort. s.o..

    Zitat Zitat von deepthroat Beitrag anzeigen
    Warum öffnest du denn den Stream eigentlich nicht im Append Modus?
    weil ich mitten in er Datei auch überschreiben muss.

    Gruß
    Col.Blake
     
    Über so viele Sachen wächst Gras , man kann keiner Wiese mehr trauen.

  4. #4
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.425
    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
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

Ähnliche Themen

  1. ZIP-Datei von Stream öffnen
    Von the snake II im Forum PHP
    Antworten: 2
    Letzter Beitrag: 05.06.10, 13:00
  2. Exe-Datei ohne Anzeige öffnen
    Von styria im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 22.03.08, 10:26
  3. [VB.NET] String in Stream ohne Datei
    Von calvin65 im Forum .NET Café
    Antworten: 4
    Letzter Beitrag: 08.09.06, 10:29
  4. Datei ohne Rückfrage öffnen
    Von uwee im Forum HTML & XHTML
    Antworten: 5
    Letzter Beitrag: 03.02.06, 18:28
  5. Antworten: 1
    Letzter Beitrag: 02.06.05, 12:23