我已經制作了一個簡單的.net應用程序,它從數據庫獲取數據並保存爲excel文檔。我注意到的問題是,一旦過程完成並生成電子表格,應用程序就會消耗約750MB的內存。它正在整理一個大的報告,但是我認爲一旦它保存了內存就被釋放了?.Net c#應用程序在完成過程後使用太多內存
這是這種情況?
謝謝
我已經制作了一個簡單的.net應用程序,它從數據庫獲取數據並保存爲excel文檔。我注意到的問題是,一旦過程完成並生成電子表格,應用程序就會消耗約750MB的內存。它正在整理一個大的報告,但是我認爲一旦它保存了內存就被釋放了?.Net c#應用程序在完成過程後使用太多內存
這是這種情況?
謝謝
在.Net內存不一定會自動釋放。
您可以嘗試使用Dispose()
實現IDisposable的所有大對象和/或清空對這些實例的任何引用,然後調用GC.Collect()
來強制立即進行垃圾回收。 可能會在您完成對大對象的引用時提供幫助。
如果數據仍然被引用和應用程序使用,那麼內存不會被垃圾收集。見garbage collection
另請參閱this previous question可能有幫助嗎?我發現它非常有用,特別是Igor Zevaka的回答。
檢查定義。例如,如果你在你的代碼中定義了表單,它會使用很多內存,因爲很多時候都是以相同的形式開始的。
例如;我的應用程序中有3種形式。 Form1,Form2和Form3。
namespace RAMAPP
{
public partial class RAMAPP : Form
{
Form1 first = new Form1();
Form2 second = new Form2();
Form3 third = new Form3();
public RAMAPP()
{
InitializeComponent();
}
}
}
在這裏,當您點擊開始按鈕時,程序將讀取您現在寫入的所有行。在開始之前,將RAMAPP程序定義爲第一,第二和第三。問題是在初始化之前定義這些表單。 您應該在初始化之前刪除所有表單定義。 在此之後,重新啓動您的程序,它將有望運行:)
你從哪裏得到'750 MB的內存'?您可能正在查看「Working Set」,因爲即使它們未被使用,頁面仍保留在進程的工作集中,這將是一個不好的指標。確保你正在查看私人字節 – 2012-01-06 15:25:30