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

C# 如何检测应用程序是否内存受限?,c#,c++,C#,C++,如何检测应用程序是否内存受限?是否有某种模式或工具?主要用于C++和C语言应用程序…我认为Microsoft Visual Studio中没有这样的工具。您可以使用perfmon查看应用程序的功能。查看“.NET CLR Memory”计数器-有大量可用选项,例如GC收集(针对每一代)、在GC中花费的时间百分比、每一代的大小等。您还可以指定只希望查看应用程序的数据 如果这还不够详细,您将需要一个探查器-这里有很多选项,包括免费的Microsoft版本。好的,您可以使用perfmon查看应用程序的

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

您可以使用
perfmon
查看应用程序的功能。查看“.NET CLR Memory”计数器-有大量可用选项,例如GC收集(针对每一代)、在GC中花费的时间百分比、每一代的大小等。您还可以指定只希望查看应用程序的数据


如果这还不够详细,您将需要一个探查器-这里有很多选项,包括免费的Microsoft版本。

好的,您可以使用
perfmon
查看应用程序的功能。查看“.NET CLR Memory”计数器-有大量可用选项,例如GC收集(针对每一代)、在GC中花费的时间百分比、每一代的大小等。您还可以指定只希望查看应用程序的数据


如果这还不够详细,你会想要一个档案器-这里有很多选项,包括免费的Microsoft。

在大多数应用程序中,这些东西实际上是很容易检测到的——也就是说,内存不足,应用程序崩溃。OTOH,如果你的意思是:我的应用程序是否通过分配和释放太多/太频繁而破坏内存,那么你有一个探查器更擅长回答的问题。关于堆栈溢出,有人问了几个问题,关于使用哪种探查器。

在大多数应用程序中,这种情况实际上是很容易检测到的——例如,内存耗尽,应用程序崩溃。OTOH,如果你的意思是:我的应用程序是否通过分配和释放太多/太频繁而破坏内存,那么你有一个探查器更擅长回答的问题。关于堆栈溢出,有人问了几个问题,关于使用哪种分析器。

指向评测工具的各种指针都是正确的。但是,根据您可用的工具(和预算;-),有一些低技术的方法可以获得快速提示:

  • 关闭盒子上的所有其他内容,看看性能是否有所提高
  • 在另一个内存更多的盒子上运行,看看性能是否有所提高
  • 在运行之前、期间和之后监视磁盘活动,并查找峰值

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

  • 关闭盒子上的所有其他内容,看看性能是否有所提高
  • 在另一个内存更多的盒子上运行,看看性能是否有所提高
  • 在运行之前、期间和之后监视磁盘活动,并查找峰值

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

    我不知道什么工具在windows下提供了同等的功能,我认为Intel VTune可以做到这一点……他们声称有

    强大的Visual Studio和.NET 整合。快速向下钻取到 源代码以识别有问题的行 代码的定义


    还有一个免费的评估版本,所以你可以试一试。

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

    我不知道什么工具在windows下提供了同等的功能,我认为Intel VTune可以做到这一点……他们声称有

    强大的Visual Studio和.NET 整合。快速向下钻取到 源代码以识别有问题的行 代码的定义

    还有一个免费的评估版本,所以你可以试一试。

    你说的“内存限制”到底是什么意思?@TallJeff你说的“内存限制”到底是什么意思?@TallJeff