我正在製作一個使用計時器的C#win表單應用程序(VS2010,.NET4),我的間隔時間爲1秒,我跟蹤任務管理器,看起來我的內存使用情況(寫入的值在任務管理器的進程選項卡中的應用程序名稱前面)增加每個區間!我在計時器滴答事件中沒有做任何特殊的事情,只需增加一個整型變量並將其顯示在標籤中。計時器增加了C#應用程序中的內存使用量
這是正常的嗎?我應該關心這個記憶問題嗎?我要在我的服務器上運行這個程序(通過遠程桌面),它會給我的服務器造成什麼問題嗎?它會耗盡內存嗎? 我使用VS工具箱中的計時器。
我正在製作一個使用計時器的C#win表單應用程序(VS2010,.NET4),我的間隔時間爲1秒,我跟蹤任務管理器,看起來我的內存使用情況(寫入的值在任務管理器的進程選項卡中的應用程序名稱前面)增加每個區間!我在計時器滴答事件中沒有做任何特殊的事情,只需增加一個整型變量並將其顯示在標籤中。計時器增加了C#應用程序中的內存使用量
這是正常的嗎?我應該關心這個記憶問題嗎?我要在我的服務器上運行這個程序(通過遠程桌面),它會給我的服務器造成什麼問題嗎?它會耗盡內存嗎? 我使用VS工具箱中的計時器。
讓我們來看看下面的例子,其更新的標籤每秒當前時間:
var timer = new Timer
{
Interval = 1000,
};
timer.Tick += (s, evt) =>
{
label1.Text = DateTime.Now.ToLongTimeString();
};
timer.Start();
如果你有這樣的代碼,你不應該擔心內存的使用。垃圾收集器可以隨時運行以釋放內存。只是你無法確定這是什麼時候發生的。
+1對Darin的評論。只要你沒有做任何事情來長期記住你的記憶,你應該沒問題。如果需要,GC將清理它。在每次打勾時,您都會爲標籤文本和新事件參數創建一個新的字符串實例。這些應該在CLR需要時回收,並且不值得關注。 –
只是爲了調試,嘗試強制垃圾收集運行
GC.Collect();
你的內存使用情況應該倒回去吧約爲哪裏。順便說一句 - 您可以在調試器中通過快速查看錶達式來執行此操作。
你可以發表一些關於你如何調用計時器的代碼,以及計時器在它的'ElapsedEventHandler'事件上做什麼? – Grambot
您是否嘗試運行'Profiler'並查看這是否真的是問題? –