Was kann Section Handle Leaks verursachen?

8

Dies ist eine Follow-up-Frage zu meiner vorherigen Frage

>

Wie in diese Antwort auf meine vorherige Frage vorgeschlagen wurde, I verwende ProcessExplorer , um eine Liste von Handles zu analysieren, die meine Anwendung zur Suche nach einem Handle-Leak verwendet.

Die ausgelaufenen Handles haben den Typ Abschnitt .

Was genau ist ein Abschnitts-Handle, wo wird es verwendet und was kann dazu führen, dass Abschnitts-Handles auslaufen?

Ich verwende keine Speicherabbilddateien in meinem Code.

    
jpfollenius 21.10.2011, 07:53
quelle

4 Antworten

4

Zitat Mark Russinovichs Inside Windows 2000 (was jetzt Windows Internals genannt wird),

  

Das -Abschnittsobjekt , das das Win32-Subsystem ein Dateizuordnungsobjekt aufruft, stellt einen Speicherblock dar, den zwei oder mehr Prozesse gemeinsam nutzen können.

Also, es ist eine Memory-Mapped-Datei. Sie würden auslaufen, wenn Sie eine Speicherabbilddatei erstellen und sie nicht schließen konnten. Ziemlich schwierig, viel spezifischer zu sein.

    
David Heffernan 21.10.2011, 08:28
quelle
3

Es stellt sich heraus, dass das Problem in einer Low-Level-Funktion liegt, die die Anzahl der Threads des aktuellen Prozesses zählt. Diese Funktion hat das

verwendet %Vor%

API-Funktion, die ein Handle zurückgibt, das nicht ordnungsgemäß geschlossen wurde. Ich bin mir nicht sicher, warum dies eine Section Handle Leck erzeugt.

    
jpfollenius 28.11.2011 11:55
quelle
2

Eine Memory-Mapped-Datei, die keinem Datei-Handle zugeordnet ist, kann für IPC (Kommunikation zwischen Prozessen) verwendet werden. Wenn Sie sie nicht direkt verwenden, führt möglicherweise eine Ihrer Einheiten oder Komponenten eine IPC-Kommunikation durch. Es ist sehr wahrscheinlich, dass Sie eine Komponente verwenden, um eine Verbindung zu einem anderen Prozess herzustellen, und sie nicht wie gewünscht freizugeben.

Die erste zu ergreifende Maßnahme besteht darin, nach einem Speicherleck zu suchen (mit dem FastMM4-Debug-Modus), und Sie werden sicher einige nicht freigegebene Objekte in Ihrem Code finden.

Da Griffe normalerweise von Objekten zugewiesen werden, löst das Auflösen aller Speicherlecks aus meinem Experiment Handle-Leaks.

Wenn Sie kein Speicherleck haben, gibt es einige CreateFileMapping() Aufrufe, um nach einem entsprechenden CloseHandle() in Ihrem gesamten Quellcode (einschließlich Drittanbieter-Quelle) zu suchen.

    
Arnaud Bouchez 21.10.2011 14:53
quelle
1

Das Abschnittshandle-Leck in .net ist aufgrund des Microsoft Hotfix KB2670838. Deinstallieren Sie dieses Update, und das Problem mit der Speicherleckage (nicht genügend Arbeitsspeicher) wird behoben.

%Vor%     
Pankaj Gupta 26.02.2014 13:51
quelle