none
ApplicationDeployment似乎很耗記憶體,也沒看到它被釋放. RRS feed

  • 問題

  • 最近在檢查程式時,發現我的程式會定期耗用掉一點記憶體,如果都不用,也會有這個狀況,檢查後,結果是檢查更版的問題導致.

    其實我所用的只有一行ApplicationDeployment.CurrentDeployment.CheckForUpdate();

    這行就會讓記憶體升起來了,我每十分鐘都會執行到這行一次,所以記憶體用量就一點一點的往上沖.它並沒有因為被執行過,下次就不會再耗用記憶體,而它的每次耗量都差不多(註,只跑這行檢查,沒進行其它動作),大約用量都在300~500K左右,所以它就依這個量慢慢的累加上去.

    不知道是否有什麼樣的方法,可以解決這個記憶體問題?

    2007年1月19日 上午 02:04

解答

  • 1. 你有必要每十分鐘跑一次嗎?
    2. ApplicationoDeployment.CurrentDeployment 是靜態的方法,所以本來就會在載入時就佔記憶體。
    3. 在跑完 CheckForUpdate() 後,下 GC.Collect() 看情況有沒有改善。
    4. 你可以反應給 Microsoft,看看他們有沒有方法處理。
    2007年1月19日 上午 03:31
    版主

所有回覆

  • 1. 你有必要每十分鐘跑一次嗎?
    2. ApplicationoDeployment.CurrentDeployment 是靜態的方法,所以本來就會在載入時就佔記憶體。
    3. 在跑完 CheckForUpdate() 後,下 GC.Collect() 看情況有沒有改善。
    4. 你可以反應給 Microsoft,看看他們有沒有方法處理。
    2007年1月19日 上午 03:31
    版主
  • 1. 十分鐘一次是可以調的,是可以不用這麼頻繁,這主要是想看它會否記憶體用到一個量後,會自行回收,但跑了12小時,並沒有.

    2.但沒想到它的記憶體會一直往上,也沒有Dispose之類的東西.

    3.GC.Collect(),這個多少有點用,但怕它會有不好的影響是我無法得知的,因為連MSDN也這麼寫.

    4.Microsoft的部份,是想先在這確認一下,如果真的不行,只好找他們.

    2007年1月19日 上午 03:54
  • 依照使用習慣,系統只需要在執行前檢查,或者是設計一個方法讓使用者自行檢查就可以了。

    因為那是由 static 回傳的方法,所以一定會佔記憶體,GC.Collect() 是在不得已的狀況下才用,你自己要斟酌使用。

    2007年1月19日 上午 03:59
    版主
  • 依照使用習慣,系統只需要在執行前檢查,或者是設計一個方法讓使用者自行檢查就可以了。

    這兩個部份是已經做好了,只是那個固定頻率檢查是使用者提出的需求,如果真的這樣子,那麼我也沒辦法,只好跟使用者再談談.

    因為那是由 static 回傳的方法,所以一定會佔記憶體,GC.Collect() 是在不得已的狀況下才用,你自己要斟酌使用。

    GC.Collect()是真的不得已才用,有在想,如果使用者堅持要那個固定檢查,我是否要把GC.Collect()做成一個Button給使用者自己按,名稱就寫 [記憶體優化] .

    2007年1月22日 上午 12:35
  • 這是個好方法

    風險給使用者自己去擔就好了,但你要事先告知

    2007年1月22日 上午 05:03
    版主