2012-03-12 96 views
0

我有一個WinForms應用程序,依靠幾個庫,我有限制控制,如Forms.Images和Forms.WebBrowser。零星的突然內存泄漏導致我的應用程序崩潰。這些並不是長時間內存泄漏。它們是隨機的,通常是不同的COM例外,並且無法預測 - 有時會在一小時後發生,有時會在一天後發生。從內存中恢復 - 在WinForms中的泄漏崩潰

我至少暫時解決問題的方法是讓另一個應用程序通過使用GetProcessesByName()驗證第一個應用程序正在運行。然而,這是有問題的,因爲正在進行的過程有時會崩潰但不會結束。我只是收到一條WER消息(儘管WER在計算機上關閉)。更糟糕的是,當第一個進程崩潰並且內存泄漏建立時,第二個進程檢查應用程序也會崩潰。然後沒有任何工作,直到我手動重新啓動整個shabang。

1)有沒有人知道一個有效的方法來讓Process A檢查Process B是否正在運行,而Process A沒有受到導致Process B崩潰的內存問題? 2)如果上述不可能或者太難,任何人都知道任何可以用來確保進程在沒有任何未完成WER錯誤的情況下運行的第三方工具,那麼如果檢測到WER錯誤,那麼重新啓動進程,並且可以承受最大的內存?

謝謝!

回答

1

,而不是試圖解決這個問題,你應該首先嚐試修復它。

如果您在使用非託管資源時出現內存泄漏問題,我會說不是忽略com組件拋出的那些異常,而是捕獲,然後處置並重新初始化,如果無法確定導致這些異常的原因。

除此之外,它似乎你的過程沒有崩潰,而是不再響應。見Process.Responding。或者監視內存使用情況,並在超過給定限制時將其停用Process.WorkingSet64

0

通常我會使用pskill從命令行中終止進程。沒有太多需要編寫一個.net服務來做到這一點。然而,事實上,你大概小而簡單的過程檢查應用程序正在失敗,這將導致我相信有問題的實際系統有問題。

pslist & pskll