Delphi 监视变体和共对象内存消耗的工具或功能

Delphi 监视变体和共对象内存消耗的工具或功能,delphi,memory-management,variant,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

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

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


在本例中,
WordDocument
WordApplication
的一部分,因此应用程序的内存使用更为相关。您可以做的是计算承载
WordApplication
的Word实例所消耗的内存量。Process Explorer会告诉您这一点。

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


在本例中,
WordDocument
WordApplication
的一部分,因此应用程序的内存使用更为相关。您可以做的是计算承载
WordApplication
的Word实例所消耗的内存量。Process Explorer会告诉您这一点。

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

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

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


按进程、时间、Word和进程监视并记录内存使用情况。观察您的测试运行,并查看performance monitor中记录的信息。您可能会做出一些无法证明的假设(例如,这种无法验证的断言:单词内存使用量的150K增加是由于您刚才调用了ComObject.Document.DoSomething而导致的100%)。

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

按进程、时间、Word和进程监视并记录内存使用情况。观察您的测试运行,并查看performance monitor中记录的信息。您可能会做出一些无法证明的假设(例如,这种无法验证的断言:单词内存使用量的150K增长是由您刚才调用ComObject.Document.DoSomething导致的100%)