2012-03-30 6 views
0

Wenn Sie den folgenden Code ausführen:Openfile Begrenzung Speicher verfügbar

OpenFileDialog dialog = new OpenFileDialog(); 
DialogResult result = dialog.ShowDialog(); 
string filename = ""; 
if (result == DialogResult.OK) 
{ 
    filename = dialog.FileName; 
    //create a new Thread and read the file. 
} 
else 
{ 
    return; 
} 

Ich bin ein seltsames Speicherverhalten gegenüber: die Speichernutzung bis 710 MB sehr schnell nach oben geht, dann geht es floatating Byte-für-Byte-up und in der Nähe von 710MB, und schließlich bekomme ich eine OutOfMemoryException.

Aber, wenn ich den Code ohne die Openfile ausführen, indem Sie einfach Hartcodierung der filepath:

string filename = "_complete_file_path_here"; 
//create a new Thread and read the file. 

es ohne Probleme funktionieren wird: der Speicher bis 840 MB ohne esitations geht, und Datei erhalten richtig gelesen.

Irgendeine Idee oder Rückmeldung?

+0

Haben Sie auf einem anderen Computer getestet, um sicherzustellen, dass es sich nicht um eine Anwendung von Drittanbietern handelt, die sich in Ihre Open File-Dialoge eingeklinkt hat und diese verschleiert? –

+0

Ja, an drei verschiedenen Laptops versucht. –

+0

Sieht alles korrekt aus. Vielleicht eine schlechte Frage aber, sind Sie sicher, dass der Dateiname des Dialogs der gleiche ist wie der fest codierte Dateiname? – riv333

Antwort

0

Diese Art von Problem kann durch eine fehlerhafte Shell-Erweiterung verursacht werden. Verwenden Sie Process Explorer oder die Debugger-Ausgabe, um zu überprüfen, welche DLLs in Ihren Prozess geladen werden, wenn Sie das Dialogfeld "Datei öffnen" verwenden. Wenn Sie etwas Verdächtiges finden, versuchen Sie, die zugehörige Software zu deinstallieren. (Drucker sind aus irgendeinem Grund oft ein Übeltäter).

Der Grund ist, dass der Datei-Öffnen-Dialog Windows Explorer Shell-Erweiterungen lädt, und leider viele der Drittanbieter-Buggy sind.

+0

Ok, danke für den Vorschlag, ich schaue nach. –