Speichernutzung erhöht, wenn Sie ein Visual Basic 2005 oder Visual Basic 2008-Anwendung, die eine Instanz einer Klasse erstellt ausführen

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 919481 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Stellen Sie sich das folgende Szenario vor:
  • In Microsoft Visual Studio 2005 oder Visual Studio 2008, erstellen Sie eine Microsoft Visual Basic-Anwendung.
  • Visual Basic-Anwendung enthält eine Klasse.
  • Die Klasse enthält ein Ereignis.
  • Visual Basic-Anwendung erstellt eine Instanz der Klasse.
  • Kompilieren Sie die Visual Basic-Anwendung im Debugmodus.
In diesem Szenario beim Ausführen von Visual Basic-Anwendung erhöht Speichernutzung.

Hinweis: Sie sind wahrscheinlicher, dass dieses Verhalten feststellen, dass die folgenden Bedingungen erfüllt sind:
  • Visual Basic-Anwendung wird für lange Zeit kontinuierlich ausgeführt.
  • Visual Basic-Anwendung erstellt viele Instanzen der Klasse, die ein Ereignis enthält. Wenn Instanzen genügend Zeiten erstellt werden, die Anwendung wird schließlich fehl mit ein OutOfMemoryException oder "nicht genügend Arbeitsspeicher" Fehler. Visual Basic-Anwendung enthält z. B. eine Schleife, die mehrere Instanzen der Klasse erstellt.

Ursache

Dies tritt auf, da die bearbeiten und Fortfahren Debuggen in Visual Studio 2005 oder Visual Studio 2008-Feature verwaltet eine Liste der schwache Verweise auf Objekte, die erstellt wurden. Wenn das Objekt, das erstellt wurde eine Klasse ist, die ein Ereignis enthält, werden diese schwache Verweise für die Dauer des Programms beibehalten. Dieses Verhalten wird die Speichernutzung erhöht.

Lösung

Wenden Sie eine der folgenden Methoden an, um dieses Problem zu beheben.

Methode 1: Durchführen der Visual Basic-Anwendung

Sie können Visual Basic-Anwendung neu starten. Wenn Sie dies tun, wird der Speicher freigegeben.

Methode 2: Kompilieren von Visual Basic-Anwendung im Releasemodus

Sie können Visual Basic-Anwendung im Releasemodus kompilieren. Beim Ausführen einer Visual Basic-Anwendung kompiliert wurde im Releasemodus wird Speichernutzung nicht erhöht, wenn Sie eine Instanz einer Klasse erstellen, die ein Ereignis enthält.

Weitere Informationen

Schritte zum Reproduzieren des Problems

  1. Starten Sie Visual Studio 2005 oder Visual Studio 2008.
  2. Zeigen im Menü Datei auf neu , und klicken Sie dann auf Projekt .
  3. Klicken Sie unter Projekttypen auf Visual Basic . Wenn Sie den Visual Basic-Projekttyp nicht sehen können, erweitern Sie Andere Sprachen , und klicken Sie dann auf Visual Basic .
  4. Klicken Sie unter Vorlagen auf Konsolenanwendung .
  5. Geben Sie einen Projektnamen, und klicken Sie dann auf OK .
  6. Ersetzen Sie alle den Code im Code-Fenster durch den folgenden Code.
    Module Module1
    
      Private Sub CreateClassWithEvent()
        Dim TestClass As New CLeak
      End Sub
    
      Sub Main()               
        ' This loop infinitely creates a class that contains an event.
        While True
          CreateClassWithEvent()
          System.GC.Collect()
          System.GC.WaitForPendingFinalizers()
          Threading.Thread.Sleep(50)
        End While
      End Sub
    
    End Module
    
    Class CLeak
      Event myEvent()
    End Class
    
  7. Klicken Sie im Menü Debuggen auf Debuggen starten .

Eigenschaften

Artikel-ID: 919481 - Geändert am: Freitag, 27. März 2009 - Version: 2.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual Studio 2008 Standard Edition
  • Microsoft Visual Studio 2008 Professional Edition
  • Microsoft Visual Studio 2005 Team System Architect Edition
  • Microsoft Visual Studio 2005 Team System Developer Edition
  • Microsoft Visual Studio 2005 Team System Test Edition
  • Microsoft Visual Studio 2005 Team System Team Foundation:
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Professional Edition
  • Microsoft Visual Studio 2005 Express Edition
  • Microsoft Visual Basic 2005
Keywords: 
kbmt kbtshoot kbprb KB919481 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 919481
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com