Ich versuche, die Speichernutzung einer WinForm-Anwendung zu reduzieren.Einfach öffnen und schließen Dialog Winform erhöht die Speichernutzung
In der Anwendung gibt es ein Hauptformular und ein Einstellungsformular. Wenn die Schaltfläche "Einstellung" gedrückt wurde, wird das Einstellungsformular als modales Formular angezeigt. Das Einstellungsformular lädt die app.config-Daten aus der Konfigurationsdatei und liest sie als Hashtable in den Speicher. Nachdem das Einstellungsformular geschlossen wurde, wird die Dispose-Methode von Windows.Forms.Form aufgerufen. Die Dispose-Methode ist so einfach wie das Hashtables-Objekt und das app.config-Objekt auf null setzen.
anzeigen SettingForm als modalform:
private void btnSettings_Click(object sender, EventArgs e)
{
frmConfig form = new frmConfig();
form.StartPosition = FormStartPosition.CenterScreen;
//MessageBox.Show(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase));
form.ShowDialog(this);
form.Dispose();
}
Dispose-Methode:
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
// Release managed resources
Logger.Verbose("Disposing SettingForm");
mySetting = null;
testFtp = null;
}
base.Dispose(disposing);
}
Hinweis: mySetting ist eine Instanz der Klasse mit allen app.config Daten gewesen Last in Hashtable, und testFtp ist ein benutzerdefiniertes Objekt für die FTP-Funktion. Soll ich Dispose-Methode für diese zwei Klassen implementieren und mit
mySetting.Dispose();
testFtp.Dispose();
, anstatt sie auf null gesetzt, da sie themself/mit nicht verwalteten Ressourcen umgehen?
Aber jedes Mal drücken Sie die Schaltfläche "Einstellung" und schließen Sie die Einstellung Formular erhöht private Byte für ein paar hundert K. Speicherlecks? Wie könnte ich es loswerden?
Es wäre hilfreich, wenn Sie zumindest etwas von Ihrem Code, insbesondere den Code, wo Sie das Formular modal und Ihre vollständige Dispose-Methode aus dem Einstellungsformular angezeigt. – MusiGenesis
Auch ein einfacher Logging- oder debug.print-Aufruf oder was auch immer innerhalb der Dispose-Methode wird bestätigen, ob es tatsächlich jemals aufgerufen wird oder nicht. – MusiGenesis
Wenn Sie den Verweis auf null setzen, wird der Speicher nicht freigegeben. –