C# 如何确定程序当前占用的内存量

C# 如何确定程序当前占用的内存量,c#,.net,memory-management,C#,.net,Memory Management,与我前面的问题相关: 有没有办法确定我的程序占用了多少内存空间?我最终处理了大量的文本文件,并且通常将处理过的对象存储在内存中。有时会有太多的信息,我的内存就会耗尽。我有一个避免内存分配问题的解决方案,但我只想在必要时使用它,以避免分页,这最终会在不必要时降低性能。有没有办法计算出我占用了多少内存,这样我只能在必要时翻页我的信息 注意:我正在寻找一种解决方案,我的程序可以利用它在必要时开始分页。您可以尝试: 检索字节数 目前被认为是被分配的。A. 参数指示此 方法可以等待很短的时间间隔 返回前

与我前面的问题相关:

有没有办法确定我的程序占用了多少内存空间?我最终处理了大量的文本文件,并且通常将处理过的对象存储在内存中。有时会有太多的信息,我的内存就会耗尽。我有一个避免内存分配问题的解决方案,但我只想在必要时使用它,以避免分页,这最终会在不必要时降低性能。有没有办法计算出我占用了多少内存,这样我只能在必要时翻页我的信息

注意:我正在寻找一种解决方案,我的程序可以利用它在必要时开始分页。

您可以尝试:

检索字节数 目前被认为是被分配的。A. 参数指示此 方法可以等待很短的时间间隔 返回前,允许系统 收集垃圾并完成 对象

需要注意的重要一点是这一部分:“检索当前认为要分配的字节数”。这意味着这种方法可能不是100%准确的——只要您知道这一点,您就应该能够大致了解应用程序执行过程中给定点的虚拟内存利用率


编辑:现在让我提供另一种可能更高效的解决方案:使用和。

您确实需要使用代码分析器。这些将准确地告诉你发生了什么,内存在哪里被用完,等等


仅供参考:它很少是你想象的那样。

long bytes=System.Diagnostics.Process.GetCurrentProcess().WorkingSet64 long bytes=System.Diagnostics.Process.GetCurrentProcess().WorkingSet64了解更多信息“[…]当前在托管内存中分配的字节数的最佳可用近似值”这不会得到所有托管程序集使用的内存量吗?是的,但仅在当前AppDomain中。我强烈建议使用perfmon来处理这类事情。+1:虽然它不能完全满足您的问题(因为您希望在代码中完成它),但这仍然是正确的;分析仍然应该是您设计的一个步骤,因为它将阐明内存使用的各个方面,这些方面可能会被代码可访问的度量所掩盖。例如,
WorkingSet64
包含共享内存,在决定是否分页时,可能需要从总内存中减去共享内存。 long bytes = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64;