gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:54:37 26 4
gpt4 key购买 nike

我正在使用 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+

为什么这个数字会这么高?

最佳答案

访问数据库时,您将不可避免地使用非托管代码。引擎的接口(interface)始终是已经存在很长时间的代码,早于 .NET 并由提供互操作的托管类包装。对于 SQL Server 和任何搭载 OleDb 或 ODBC 的提供程序来说都是如此。

这些托管类将始终实现 IDisposable,因此您可以尽早释放 native 提供程序消耗的资源。忘记这样做很常见,很少有人注意到。除了看到进程运行“繁重”之外,似乎无缘无故地消耗了大量句柄和非托管内存。当垃圾收集器运行不够频繁时尤其如此,您可以在 Perfmon.exe 中看到这一点。因此,除了不使用 Dispose 之外,部分问题可能是您没有对这些 DTO 对象做足够的工作,还没有获得足够的 GC 搅动。

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

关于c# - 为什么非托管内存可能占控制台应用程序使用的内存的 60% 以上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12248527/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com