【发布时间】:2011-06-01 06:44:45
【问题描述】:
我知道这是一个愚蠢的问题,但是当我运行包含线程的程序时,我发现任务管理器中的应用程序的内存(VM 和使用的内存)正在增加,因为我的线程此时已停止,所以我想知道是否有任何方法可以知道它的来源,或者只知道应用程序现在在哪一行编译? . 我使用了线程监视窗口,但没有得到任何有用的信息。
【问题讨论】:
标签: c# visual-studio visual-studio-2008
我知道这是一个愚蠢的问题,但是当我运行包含线程的程序时,我发现任务管理器中的应用程序的内存(VM 和使用的内存)正在增加,因为我的线程此时已停止,所以我想知道是否有任何方法可以知道它的来源,或者只知道应用程序现在在哪一行编译? . 我使用了线程监视窗口,但没有得到任何有用的信息。
【问题讨论】:
标签: c# visual-studio visual-studio-2008
如果您确定您的程序正在使用过多的内存,那么获取memory profiler 将是一个不错的首选方法。
【讨论】:
您可以使用 CLR Profiler 应用程序获取内存消耗的快照。然后,您将能够确定问题的根源。
CLR Profiler 是免费的,可在此处获取:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=be2d842b-fdce-4600-8d32-a3cf74fda5e1
【讨论】:
值得注意的是,内存分析器并不直接映射到任务管理器中的内存(VM,和使用的内存)或Working Set 计数器。
程序的工作集是 这些页面的集合在其 虚拟地址空间 最近引用。它包括两者 共享和私有数据。共享的 数据包括包含所有 说明您的应用程序 执行,包括您的 DLL 中的那些 和系统DLL。作为工作 设置大小增加,内存需求 增加。
如果内存服务于内存分析器将查看代表您正在使用的实际内存的私有字节。
另请参阅 Tess Ferrandez 的 this article 中的 关于性能计数器以及如何不使用任务管理器的评论部分
【讨论】: