0

我想知道是否存在任何工具(如分析器)或 Windows 函数来监视特定 COM 对象使用了多少内存。

例如:

var
  WordApplication, WordDocument: Variant;
begin
   WordApplication := CreateOleObject('Word.Application');
   WordDocument := WordApplication.Documents.Add;
   //here I would like to know how much memory is used by
   //the WordApplication and WordDocument variables.      
end;
4

3 回答 3

4

一般来说,不可能有这样的工具。对于这样一个工具的存在,它需要了解任何通用 COM 对象的内部结构,我认为这个要求太多了。

在此示例中,WordDocument是的一部分,WordApplication因此应用程序的内存使用更加相关。您可以做的是计算出托管的 Word 实例消耗了多少内存WordApplication。Process Explorer 会告诉你。

于 2011-04-15T20:28:20.407 回答
0

内存分析器存在,但检查超出您控制的应用程序的内部可能很困难,因为通常您需要调试符号和/或检测来让工具知道何时以及分配了哪些对象内存(AFAIK MS 提供“检查构建” Windows,但不是 Office)。确实,COM 类型库和拦截标准 API 会有所帮助 - 尝试下载AQTime等工具的试用版,看看它是否可以帮助您 - 我从未尝试过以这种方式使用它。

于 2011-04-17T19:07:47.780 回答
0

您可能得到的最接近的方法是小心移除其他干扰源,并在 Windows 中使用性能监视器,同时在非常安静的虚拟机上运行。

随着时间的推移,Word 和您的进程按进程观察和记录内存使用情况。观看您的测试运行,并查看性能监视器中记录的信息。您可能会做出一些您无法证明的假设(这种无法验证的断言的示例:WORD 内存使用量增加 150K 是 100% 由您刚刚所做的对 ComObject.Document.DoSomething 的调用引起的)。

于 2011-04-18T19:10:45.333 回答