2009-09-17 47 views
6

有关我刚才的问题:
Preventing Memory issues when handling large amounts of text我怎么能确定我的节目了多少内存目前占据

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

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

回答

5

您可以尝试GC.GetTotalMemory

检索字节 目前认为被分配的数量。 A 参数指示此 方法是否可以在返回之前等待一个短的间隔 以允许系统 收集垃圾并最终确定 对象。

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

编辑:现在让我来提供不同的解决方案,可能会更有成效:使用perfmonCLR performance counters

+0

> “[...]目前在管理存储器分配的字节数的最佳可用近似” 不会这获取所有托管程序集使用的内存量? – 2009-09-17 19:08:51

+0

是的,但它只在当前的AppDomain中。我强烈建议使用perfmon来处理这种事情。 – 2009-09-17 19:22:39

3

您确实需要使用代码探查器。这些会告诉你到底发生了什么,内存在哪里用完等等。

仅供参考:很少有你认为它的地方。

+0

+1:虽然它不能完全满足你的问题(因为你想用代码来完成),但这仍然是正确的;性能分析应该仍然是您设计的一个步骤,因为它将阐明可能被代码访问的测量所遮蔽的内存使用情况。例如,'WorkingSet64'包含共享内存,您可以在决定是否分页时从共享内存中减去共享内存。 – 2009-09-17 19:27:15

7
long bytes = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64;
3

长字节= System.Diagnostics.Process.GetCurrentProcess()。WorkingSet64更多See Here

相关问题