c# - .net 应用程序的非托管堆大小

标签 c# memory heap-memory unmanaged red-gate-ants

我目前正在尝试对我正在处理的 C# 项目进行内存分析,以确定是否存在任何泄漏,因为此应用程序需要尽可能接近 100% 的正常运行时间。我开始使用 Ants Memory Profiler 7.4 版,并注意到我的非托管内存随着时间的推移不断增长,尽管我的托管内存没有。

经过更多试验后,我尝试对一个程序进行类似的分析,该程序除了阻塞 Console.ReadLine() 指令外什么都不做。我运行了分析并注意到发生了同样的事情。我的非托管堆正在缓慢增长。事实上,它实际上似乎只在垃圾收集器被调用时增长(通过快照功能)。现在,为什么反复调用垃圾收集会导致非托管内存无休止地增加?与 ANTS 有关吗?

我想使用一些其他工具,最好是 windbg 或 SOS 之类的工具来确定它看到我的非托管内存使用情况。现在了解其中的内容对我来说并不重要——尽管从长远来看这可能有助于调试。我只是想确定当前正在运行的应用程序的非托管内存使用情况。我想看看这是否真的是 Ant 的问题,还是我对环境运作方式的误解。拥有某种 .net、visual studio 或 Windows 工具来为我提供有关我的过程的准确信息将有助于我实现这一点。

最佳答案

AQTime来自 SmartBear 的软件在为您提供托管和非托管代码的内存分析方面做得非常好。我的很多工作都在托管和非托管边界,我已经多次使用它来查找内存泄漏。

如果您正在处理大块非托管内存,请务必调用 GC.AddMemoryPressureGC.RemoveMemoryPressure 来帮助 GC。

关于c# - .net 应用程序的非托管堆大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15814060/

相关文章:

c# - 使用 WordProcessingDocument 时如何删除 XMLSchemaReference?

c# - 序列化问题(参数对象的类型不是原始类型)

c# - 使用 XDocument 和 XElement 如何在 C# 中向 XML 添加 XAttribute 和值

c++ - 堆内存是每个进程的吗? (或)不同进程共享的公共(public)内存位置?

java - C/Java 中的堆栈与堆

c# - 如何隐藏devexpress XtraGrid的列

c++ - 了解 C++ 中的动态对象 ("new")

c++ - 使用 valgrind 在内存泄漏检测中抑制 "dl-hack3-cond-1"

c++ - 为什么悬挂指针引用会使程序崩溃

c - 如何修复 "A heap has been corrupted"运行时错误?