用于监视变体和com对象的内存消耗的工具或函数

时间:2011-04-15 20:22:30

标签: delphi memory-management variant

我想知道是否存在任何工具(如分析器)或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;

3 个答案:

答案 0 :(得分:4)

一般情况下,可能没有这样的工具。要使这样的工具存在,它需要知道任何一般COM对象的内部结构,我认为这太过分了。

在此示例中,WordDocumentWordApplication的一部分,因此应用程序的内存使用更为相关。您可以做的是计算托管WordApplication的Word实例占用的内存量。 Process Explorer会告诉你。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可能获得的最接近的是仔细删除其他干扰源,并在非常安静的虚拟机上运行时在Windows中使用性能监视器。

按进程监视并记录内存使用情况,以及Word和您的进程。观察您的测试运行,并在性能监视器中查看记录的信息。你可能会做一些你无法证明的假设(这种无法验证的断言的例子:WORD内存使用量的150K增加是由于调用ComObject.Document.DoSomething而导致的100%,你刚刚做了)。 p>