【问题标题】:Most Accurate Way to Get Memory Usage for Silverlight Browser Application获取 Silverlight 浏览器应用程序内存使用情况的最准确方法
【发布时间】:2011-11-04 19:59:57
【问题描述】:

目前我正在跟踪 Silverlight 4 应用程序中的内存泄漏问题。我可以使用任务管理器观察 iexplorer.exe 使用的内存逐渐增加。

但是,我正在 Silverlight 代码中寻找一种方法来判断应用程序当前在 IE 进程中使用了多少内存。我试过 GC.GetTotalMemory 但它并不代表 iexplorer 的实际内存使用情况。

我有用于跟踪内存泄漏本身的开发人员工具,所以我不是在寻找它,而是在我的 Silverlight 代码中寻找一种方法来获取总 IE 内存使用情况,或者至少更接近地表示实际使用的内容Silverlight 而不是垃圾收集器认为正在使用的东西。

【问题讨论】:

    标签: c# silverlight


    【解决方案1】:

    GC 分配的内存是对 SL 应用程序使用的内存的动态部分的良好估计。否则不清楚您还需要哪些其他类型的内存使用。

    如果您需要一些其他数据,请考虑首先使用 VaDump(http://msdn.microsoft.com/en-us/magazine/dd882521.aspx 链接自 Using VADump to track memory usage - OpenProcess Failed c0000034)。当您确定您感兴趣的内存部分/类型时,应该相对容易获得此信息(您可能需要通过本机调用来收集它,但可能所有都可以被 PInvoke'ed)。

    更新:我认为您要查找的所有信息都可以通过性能计数器 - 使用示例 - http://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.countername.aspx 获得(但我认为您无法从 SL 获得)。

    【讨论】:

    • 所以我正在寻找的是当前正在使用的所有类型内存的组合。 (Windows 任务管理器报告的内容)。例如,在一个快照中,我的第 2 代和大型对象堆之间有 18.05MB 和 3.168 MB,但非托管有 110.1 MB。因此,如果可能的话,我正在寻找一种通过托管代码获取非托管金额或总金额的方法。
    【解决方案2】:

    试试 Visual Studio Profiler

    https://blogs.msdn.com/b/profiler/archive/2010/04/26/vs2010-silverlight-4-profiling.aspx

    “对于 .NET 内存分析,请在步骤 1 中使用“VSPerfClrEnv /samplegc”或“VSPerfClrEnv /samplegclife”来获取分配分析或分配和生命周期分析。”

    【讨论】:

    • 这篇文章不错,但我正在寻找一种方法来从编译的 Silverlight 应用程序的托管代码中判断内存使用情况。
    【解决方案3】:

    【讨论】:

    • 虽然我使用过这个工具并认为它很神奇,但它并不能满足我的需求。我需要一些编译到我的应用程序中的东西,以便我的应用程序可以获得准确的内存使用读数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 2017-09-01
    • 2018-02-19
    相关资源
    最近更新 更多