Code Analyse

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von tommy.

    Code Analyse

    Hallo Leute!
    Ich habe noch nie eine Code-Analyse gemacht.
    Und ich habe es bei einem großen Projekt mal ausprobiert.
    Hatte ziemlich viele Warnungen
    ein paar konnte ich lösen und ein paar nicht z.B: dieser Code

    VB.NET-Quellcode

    1. Using fs As New FileStream(Path.Combine(My.Computer.FileSystem.SpecialDirectories.Temp, "Update.exe"), FileMode.Create, FileAccess.Write, FileShare.None)
    2. With New BinaryWriter(fs)
    3. .Write(My.Resources.Update)
    4. .Flush()
    5. .Close()
    6. End With
    7. End Using

    Ich bekomme diese Warnungen

    Warnung CA2202
    Das Objekt "'fs'" kann mehrere Male in der 'Form1.Form1_Load(Object, EventArgs)'-Methode verworfen werden. Um zu verhindern, dass eine System.ObjectDisposedException generiert wird, sollten Sie die Dispose-Methode nur einmal für ein Objekt aufrufen.

    Laut Microsoft dürfte es um diesen Code teil gehen

    VB.NET-Quellcode

    1. With New BinaryWriter(fs)
    2. .Write(My.Resources.Update)
    3. .Flush()
    4. .Close()'<----------------------
    5. End With

    Ich habe Close entfernt und die Warnung war weg :?:
    Aber warum Soll ich Close weggeben, ich verstehe die Sache nicht, ich muss ja die Datei schließen, Oder ?(
    gibts irgendwo eine Seite wo viele solche Warnung genauer beschrieben wird?
    Denn da gibts viele davon, wo ich völlig überfordert bin.
    Weil ich nicht genau weiß, was der von mir will :(
    Auf die schnelle probiert...

    VB.NET-Quellcode

    1. Using fs As New FileStream(Path.Combine(My.Computer.FileSystem.SpecialDirectories.Temp, "Update.exe"), FileMode.Create, FileAccess.Write, FileShare.None)
    2. With New BinaryWriter(fs)
    3. .Write(My.Resources.Update)
    4. .Flush()
    5. End With
    6. fs.Close()
    7. End Using
    Aktuelles Projekt: Z80 Disassembler für Schneider/Amstrad CPC :love:

    tommy schrieb:

    Ich habe Close entfernt und die Warnung war weg
    Aber warum Soll ich Close weggeben, ich verstehe die Sache nicht, ich muss ja die Datei schließen, Oder
    gibts irgendwo eine Seite wo viele solche Warnung genauer beschrieben wird?
    Close und Dispose sind dasselbe.
    End Using reicht also, um fs zu schliessen.
    aber das gilt nur für oobdoo's Version. Im Original-Code wird ja der BinaryWriter geclosed.

    aber probierma so:

    VB.NET-Quellcode

    1. Dim fullPath = Path.Combine(My.Computer.FileSystem.SpecialDirectories.Temp, "Update.exe")
    2. Using fs = New FileStream(fullPath, FileMode.Create, FileAccess.Write, FileShare.None), bw = New BinaryWriter(fs)
    3. bw.Write(My.Resources.Update)
    4. End Using
    (nur ein Versuch)
    Den Sinn der Warning verstehe ich auch net. Zum Dispose-Pattern gehört nämlich auch, dass er robust zu implementieren ist gegen mehrfaches disposen.

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Hallo!
    Ja ich habe endlich eine Antwort gefunden, das wusste ich nicht das Using Close bzw. Dispose integriert ist. Daher die Warnung
    Aber ich hebe eh noch eine frage an dich ist die Codeanalyse wichtig bzw. sind die Warnungen auch wichtig zu beheben?
    Im Prinzip funktioniert die Software aber dieses mal möchte ich die Software das sie richtig funktioniert, d.h. das keine böse Überraschung kommen oder das CPU oder Speicher durch schlampe Programmierung darunter leiden.
    Dann ich habe auf eine Seite auch gelesen das bei schließen eine Anwendung Rest im Speicher überbleiben, da z.b: durch schlampige Programmierung bzw. das kein Dispose ordnungsgemäß ausgeführt wurde etc..