簡體   English   中英

C#如何報告非特定內存使用情況

[英]C# How to report nonspecific memory usage

因此,我試圖向我的鞋幫證明該產品包含內存泄漏。 但是,運行接觸COM對象的腳本大約要花費2個小時才能復制到OutOfMemoryException 為了使這種表現形式具有可表示性,我需要基線數據來表明不是我的腳本本身導致了內存問題,還需要數據來表明行為確實重復了內存泄漏。

我打算通過定期報告將總內存使用情況報告到日志文件中來做到這一點。 例如,在此框上,我的Windows任務管理器->性能選項卡顯示2.00GB中的當前我使用的是1.67GB。 那就是我需要輸入我的代碼並定期轉儲到日志文件中的數字。

只有一個問題...我如何獲得那條信息?

感謝您可以提供的任何幫助,即使是告訴我不可能:P。

更新 :感謝您提供有關COM內存問題的信息,但是我所說的“基准”也以有效相同的方式觸及COM對象,不會引起特定行為造成的內存問題。 在這里,僅回答我提出的問題將對我有所幫助。

更新: ,為了回答OP的問題, System.GC類提供了一種估計使用中的內存量的方法:

System.GC.GetTotalMemory(false)

如果在長時間運行的進程(即沒有空閑時間)上使用COM,則除非定期調用,否則遇到內存泄漏。

Thread.CurrentThread.Join(100);

100當然可以更改,但是它將是活動線程在恢復之前“休眠”的時間。 從文檔:

阻止調用線程,直到線程終止或經過指定的時間為止,同時繼續執行標准COM和SendMessage泵送。

關鍵是最后一個子句。

參考: http : //support.microsoft.com/kb/828988

如果基於單線程單元(STA)的控制台應用程序創建然后使用STA組件對象模型(COM)組件,並且該控制台應用程序沒有執行足夠的操作來泵送COM消息,例如調用Monitor.Enter方法,Thread.Join方法等,可能會出現以下症狀。 此外,如果控制台應用程序執行了長時間運行且不會發送消息的操作,例如調用Console.ReadLine方法,則可能會出現以下現象:

  • COM組件的發布可能會延遲。
  • 垃圾收集器收集的對象的Finalize方法的調用可能會延遲。
  • 調用COM組件可能會長時間阻止應用程序線程。 STA應用進程使用的內存量可能會隨時間增加。
  • 調用GC.WaitForPendingFinalizers方法可能需要很長時間才能返回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM