【发布时间】:2010-04-11 17:53:14
【问题描述】:
我正在用 C# 编写一个使用第 3 方 COM DLL 的应用程序,该 dll 在非托管内存中创建了大量资源(如位图、视频、数据结构)。在四处挖掘时,我遇到了以下对垃圾收集器的调用:
GC.AddMemoryPressure(long long bytesAllocated)
这里的 MSDN 中有记录:
http://msdn.microsoft.com/en-us/library/system.gc.addmemorypressure.aspx
这听起来像是我应该调用的东西,因为这个外部 dll 正在创建 CLR 不知道的大量资源。
我想我有两个问题......
- 当 dll 是第 3 方时,我如何知道要添加多少内存压力,而我无法确切知道该 dll 分配了多少内存。
- 这样做有多重要?
【问题讨论】:
-
您不太可能需要使用此 API,但出于好奇——“创造大量资源”背后的数字是什么(这是一个非常模糊的说法)?具体来说,分配的内存量是多少?
-
可能是几兆字节(甚至几十兆字节)的数据迈克尔,确切的大小取决于视频的数量,编码,有很多因素会影响这一点。我希望找到一种方法来了解在初始化这个特定的 com 对象之前和之后使用了多少非托管内存,这样我就可以使用某种启发式方法来确定要添加的合理内存压力水平。由于代码是第 3 方,我不知道具体细节
标签: c# garbage-collection