c# – 为什么非托管内存占控制台应用程序使用的内存的60%以上?

我正在使用ANTS Memory Profiler 7.0分析内存使用情况,并注意到控制台应用程序的非托管内存使用量大约为193MB(约62%),只比1000万左右的记录填充一些DTO.非托管内存的帮助文本说:The memory is assigned to the pa...

我正在使用ANTS Memory Profiler 7.0分析内存使用情况,并注意到控制台应用程序的非托管内存使用量大约为193MB(约62%),只比1000万左右的记录填充一些DTO.

非托管内存的帮助文本说:

The memory is assigned to the parts of the application that aren’t running as pure .NET code. This includes the common language runtime itself, graphics buffers and any unmanaged data accessed through P/Invoke or COM+

为什么这个数字会如此之高?

解决方法:

访问数据库时,您将不可避免地使用非托管代码.引擎的接口总是代码已经存在了很长时间,早于.NET,并由提供互操作的托管类包装.适用于SQL Server和任何背靠OleDb或ODBC的提供程序.

这些托管类将始终实现IDisposable,因此您可以尽早释放本机提供程序所消耗的资源.忘记这样做很常见,很少注意到.除了看到流程“重”之外,似乎消耗了大量的句柄和非托管内存,没有任何理由.当垃圾收集器运行不够频繁时会出现这种情况,这可以通过Perfmon.exe看到.因此除了不使用Dispose之外,部分问题可能是你没有对这些DTO对象做足够的工作但还没有获得足够的GC流失.

检查您的代码并确保在需要时使用Dispose()和using语句.

本文标题为:c# – 为什么非托管内存占控制台应用程序使用的内存的60%以上?

基础教程推荐