C# .net内存测量和分析
我知道有很多问题与此相关,所以我将非常具体。 我用两条指令创建控制台应用程序。创建一个容量较大的列表并用示例数据填充,然后清除该列表或使其等于null。 我想知道的是,在调试时是否有办法知道/measure/profile,在清除列表并设置null之后,应用程序使用的实际内存是否与创建和填充列表之前大致相同。我可以肯定地知道应用程序已经处理了信息,GC已经完成了收集,但是我可以肯定地知道在此之后我的应用程序将消耗多少内存吗? 我知道在填充列表的过程中,分配了大量内存,在清除之后,如果其他进程需要,内存可能会被其他进程使用,但是否可以测量应用程序最终消耗的实际内存? 谢谢 编辑:好的,这是我的真实场景和目标。我在一个WPF应用程序上工作,该应用程序处理通过USB设备读取的大量数据。在某个时候,应用程序会分配大约700+MB的内存来存储所有列表数据,并对这些数据进行解析、分析,然后写入文件系统。当我将数据写入文件系统时,我清除了所有列表,并处理了以前保存大数据的所有集合,这样我就可以进行另一次数据处理。我想知道我不会遇到性能问题或最终耗尽所有内存。我对我的程序使用大量内存很满意,但我对它在经过几次USB处理后全部使用不满意。 我怎样才能控制这一切?在这种情况下是否使用内存或进程分析器?简单地使用任务管理器,我看到我的应用程序占用了800MB的内存,但清除集合后,内存保持不变。我知道除非windows需要,否则不会关闭,所以我想知道是否可以确定内存已被清除,并且可以自由使用(由我的应用程序或windows)将为您提供所需的所有信息。具体来说,您可能最感兴趣的是进程的“私有字节历史”图 或者,也可以使用Windows的性能监视器来跟踪特定的应用程序。这将为Process Explorer提供相同的信息,尽管它将允许您将实际数字写入一个单独的文件 (一张照片,因为我能…)将为您提供所需的所有信息。具体来说,您可能最感兴趣的是进程的“私有字节历史”图 或者,也可以使用Windows的性能监视器来跟踪特定的应用程序。这将为Process Explorer提供相同的信息,尽管它将允许您将实际数字写入一个单独的文件 (一张照片,因为我可以…)我个人使用C# .net内存测量和分析,c#,.net,memory,profiling,C#,.net,Memory,Profiling,我知道有很多问题与此相关,所以我将非常具体。 我用两条指令创建控制台应用程序。创建一个容量较大的列表并用示例数据填充,然后清除该列表或使其等于null。 我想知道的是,在调试时是否有办法知道/measure/profile,在清除列表并设置null之后,应用程序使用的实际内存是否与创建和填充列表之前大致相同。我可以肯定地知道应用程序已经处理了信息,GC已经完成了收集,但是我可以肯定地知道在此之后我的应用程序将消耗多少内存吗? 我知道在填充列表的过程中,分配了大量内存,在清除之后,如果其他进程需要
它有一个实时选项,您可以使用它查看内存使用情况。它帮助我发现了大量内存泄漏问题。我个人使用
它有一个实时选项,您可以使用它查看内存使用情况。它帮助我发现了大量内存泄漏问题。如果你指的是物理内存,那么很难衡量Windows上的“真实内存”使用情况。最有可能的情况是,你还想要其他东西,比如:
请注意,垃圾收集完成后,为您的进程分配的内存量(1)更改并不是必需的—GC可能会保留分配的内存以供将来的托管分配(这种行为并不特定于CLR for memory Allocation-大多数内存分配器保留空闲块供以后使用,除非通过某种方式强制释放)。该博客是有关GC/内存详细信息的优秀来源。很难衡量“真实内存”如果你指的是物理内存,那么它在Windows上的使用情况。最可能的情况是,你需要一些其他的东西,如:
请注意,垃圾收集完成后,为您的进程分配的内存量(1)更改并不是必需的—GC可能会保留分配的内存以供将来的托管分配(此行为并非特定于CLR for memory Allocation-大多数内存分配器保留空闲块供以后使用,除非通过某种方式强制释放)。该博客是有关GC/memory详细信息的优秀来源。请尝试ANTS Profiler。它不是免费的,但您可以尝试试用版本
试试ANTS Profiler。它不是免费的,但你可以试试试用版