Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .net内存测量和分析_C#_.net_Memory_Profiling - Fatal编程技术网

C# .net内存测量和分析

C# .net内存测量和分析,c#,.net,memory,profiling,C#,.net,Memory,Profiling,我知道有很多问题与此相关,所以我将非常具体。 我用两条指令创建控制台应用程序。创建一个容量较大的列表并用示例数据填充,然后清除该列表或使其等于null。 我想知道的是,在调试时是否有办法知道/measure/profile,在清除列表并设置null之后,应用程序使用的实际内存是否与创建和填充列表之前大致相同。我可以肯定地知道应用程序已经处理了信息,GC已经完成了收集,但是我可以肯定地知道在此之后我的应用程序将消耗多少内存吗? 我知道在填充列表的过程中,分配了大量内存,在清除之后,如果其他进程需要

我知道有很多问题与此相关,所以我将非常具体。 我用两条指令创建控制台应用程序。创建一个容量较大的列表并用示例数据填充,然后清除该列表或使其等于null。 我想知道的是,在调试时是否有办法知道/measure/profile,在清除列表并设置null之后,应用程序使用的实际内存是否与创建和填充列表之前大致相同。我可以肯定地知道应用程序已经处理了信息,GC已经完成了收集,但是我可以肯定地知道在此之后我的应用程序将消耗多少内存吗? 我知道在填充列表的过程中,分配了大量内存,在清除之后,如果其他进程需要,内存可能会被其他进程使用,但是否可以测量应用程序最终消耗的实际内存? 谢谢

编辑:好的,这是我的真实场景和目标。我在一个WPF应用程序上工作,该应用程序处理通过USB设备读取的大量数据。在某个时候,应用程序会分配大约700+MB的内存来存储所有列表数据,并对这些数据进行解析、分析,然后写入文件系统。当我将数据写入文件系统时,我清除了所有列表,并处理了以前保存大数据的所有集合,这样我就可以进行另一次数据处理。我想知道我不会遇到性能问题或最终耗尽所有内存。我对我的程序使用大量内存很满意,但我对它在经过几次USB处理后全部使用不满意。 我怎样才能控制这一切?在这种情况下是否使用内存或进程分析器?简单地使用任务管理器,我看到我的应用程序占用了800MB的内存,但清除集合后,内存保持不变。我知道除非windows需要,否则不会关闭,所以我想知道是否可以确定内存已被清除,并且可以自由使用(由我的应用程序或windows)

将为您提供所需的所有信息。具体来说,您可能最感兴趣的是进程的“私有字节历史”图

或者,也可以使用Windows的性能监视器来跟踪特定的应用程序。这将为Process Explorer提供相同的信息,尽管它将允许您将实际数字写入一个单独的文件

(一张照片,因为我能…)

将为您提供所需的所有信息。具体来说,您可能最感兴趣的是进程的“私有字节历史”图

或者,也可以使用Windows的性能监视器来跟踪特定的应用程序。这将为Process Explorer提供相同的信息,尽管它将允许您将实际数字写入一个单独的文件

(一张照片,因为我可以…)

我个人使用
它有一个实时选项,您可以使用它查看内存使用情况。它帮助我发现了大量内存泄漏问题。

我个人使用

它有一个实时选项,您可以使用它查看内存使用情况。它帮助我发现了大量内存泄漏问题。

如果你指的是物理内存,那么很难衡量Windows上的“真实内存”使用情况。最有可能的情况是,你还想要其他东西,比如:

  • 为进程分配的内存量(参见Zooba的答案)
  • 分配的托管内存量-CLR探查器,或此探查器中列出的任何其他探查器-
  • 任务管理器为您的应用程序报告什么

  • 请注意,垃圾收集完成后,为您的进程分配的内存量(1)更改并不是必需的—GC可能会保留分配的内存以供将来的托管分配(这种行为并不特定于CLR for memory Allocation-大多数内存分配器保留空闲块供以后使用,除非通过某种方式强制释放)。该博客是有关GC/内存详细信息的优秀来源。

    很难衡量“真实内存”如果你指的是物理内存,那么它在Windows上的使用情况。最可能的情况是,你需要一些其他的东西,如:

  • 为进程分配的内存量(参见Zooba的答案)
  • 分配的托管内存量-CLR探查器,或此探查器中列出的任何其他探查器-
  • 任务管理器为您的应用程序报告什么

  • 请注意,垃圾收集完成后,为您的进程分配的内存量(1)更改并不是必需的—GC可能会保留分配的内存以供将来的托管分配(此行为并非特定于CLR for memory Allocation-大多数内存分配器保留空闲块供以后使用,除非通过某种方式强制释放)。该博客是有关GC/memory详细信息的优秀来源。

    请尝试ANTS Profiler。它不是免费的,但您可以尝试试用版本



    试试ANTS Profiler。它不是免费的,但你可以试试试用版