如何检测应用程序是否受内存限制?

时间:2009-02-08 19:14:06

标签: c# c++

如何检测应用程序是否受内存限制?有某种模式或工具吗?主要用于C ++和C#应用程序......我不认为Microsoft Visual Studio中有这样的工具。

4 个答案:

答案 0 :(得分:4)

好吧,您可以使用perfmon查看应用程序的功能。查看“.NET CLR内存”计数器 - 有许多可用选项,例如GC集合(每代),GC中花费的时间百分比,每代的大小等。您还可以指定您只需要查看应用程序的数据。

如果这还不够详细,那么你需要一个分析器 - 这里有很多选项,包括微软的免费CLR Profiler

答案 1 :(得分:0)

在大多数应用程序中,这些东西实际上很容易被发现 - 即你的内存耗尽而你的应用程序崩溃了。 OTOH,如果你的意思是:我的应用程序是通过分配和释放太多/太频繁来捶打记忆然后你有一个问题,分析器更好地回答。有关使用哪个探查器的堆栈溢出问题已经提出了几个问题。

答案 2 :(得分:0)

分析工具的各种指针都在目标上。但是,根据您的可用工具(和预算;-),有一些低技术方法可以快速提示:

  1. 关闭包装盒上的其他所有内容,看看性能是否有所改善。
  2. 在另一个包含更多内存的盒子上运行,看看性能是否有所改善。
  3. 在运行之前,期间和之后监控磁盘活动并查找峰值。

答案 3 :(得分:0)

在Linux下,您可以使用perfmon kernel patches提供的基于硬件的性能监控界面。它们不在主流内核中,目前有两种竞争方法(LKML需要花费大量时间来决定哪一种更好),但它们都提供对各种硬件计数器的访问。使用它们可以跟踪内存带宽问题,缓存问题等。这是相当低级的东西,但是当性能受到关注时,这些讨厌的问题很重要。

我不知道什么工具在windows下提供了相同的功能我认为英特尔VTune可以做到这一点......他们声称有

  

强大的Visual Studio和.NET   积分。快速深入研究   确定有问题的行的来源   代码。

还有一个免费的评估版 - 所以你可以尝试一下。