2017-08-30 51 views
0

我希望能夠在任何應用程序中找到某種對象的所有存活引用,而無需使用外部內存分析器。C#icorprofilercallback4 :: SurvivingReferences

我的基本想法是,我只是希望能夠列出我的應用程序內的所有用戶控件的名稱和對象大小,這將允許我發現所有未使用的控件女巫不是真的死:)

經過一些谷歌研究,我發現了一些應該符合我的興趣的東西。

icorprofilercallback4::SurvivingReferences

看起來這是純C++,我沒能找到任何樣品王。

有人已經試圖做到這一點?我正在尋找解決方案的正確方向?

Thx對你的興趣在我的問題。

回答

0

此接口是Microsoft Profiling API的一部分。所有的.NET內存分析器(你不想使用)都使用這個API來收集數據。爲了您的情況,您需要獲取所有活動對象('存活'只是其中的一部分)。要獲取對象類型名稱,您應該將獲取的數據與程序集元數據綁定等。

所以,你是在正確的方式,但這種方式是非常非常非常長。 使用現有的工具之一是大大縮短,我會建議你這樣。

+0

我真的很喜歡你花了一些時間來回答我的問題。 我想我找到了一些東西,這就是所謂的ClrMD有一個很好的文章:https://blog.maartenballiauw.be/post/2017/01/03/exploring-.net-managed-heap-with-clrmd。 html 但我不確定是否可以直接在我正在監視的應用程序中使用它。我會試試:) 還有其他想法嗎? – pix

+0

猜你可以從你的代碼中使用它。 [Here](http://blogs.microsoft.co.il/sasha/2008/05/28/programmatically-generating-a-dump-file/),你可以學習如何從代碼中獲取內存轉儲。但要準備好分析轉儲可能需要大量內存並會影響應用程序的性能。 P.S.仍然感興趣,爲什麼你不想使用一些現有的工具來達到你的目標 –

+0

我不想使用外部工具,因爲我真的想知道如何去做:)知識改進的個人路徑:) 我注意到如果這不是一個簡單的解決方案相關的問題,那麼沒有太強調答案:/ – pix