Инструмент или функция для контроля потребления памяти вариантов и объектов - PullRequest
0 голосов
/ 16 апреля 2011

Я хотел бы знать, существует ли какой-либо инструмент (например, профилировщик) или функция 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 ]

4 голосов
/ 16 апреля 2011

В общем, такого инструмента не может быть. Чтобы такой инструмент существовал, ему нужно знать о внутренностях любого общего COM-объекта, и я думаю, что это слишком много, чтобы спрашивать.

В этом примере WordDocument является частью WordApplication, поэтому использование памяти для приложения несколько более уместно. Что вы могли бы сделать, так это определить, сколько памяти потребляет экземпляр Word, в котором находится WordApplication. Об этом вам сообщит Process Explorer.

0 голосов
/ 18 апреля 2011

Самое близкое, что вы можете получить, - это аккуратно удалить другие источники помех и использовать системный монитор в окнах при работе на очень тихой виртуальной машине.

Наблюдайте и регистрируйте использование памяти процессом, временем, Word и вашим процессом. Наблюдайте за выполнением теста и просматривайте записанную информацию в мониторе производительности. Вы, вероятно, сделаете некоторые предположения, которые вы не можете доказать (Пример такого не поддающегося проверке утверждения: увеличение использования памяти WORD на 150 КБ было на 100% вызвано вызовом ComObject.Document.DoSomething, который вы только что сделали).

0 голосов
/ 17 апреля 2011

Профилировщики памяти существуют, но проверка внутренних компонентов приложений, находящихся вне вашего контроля, может быть затруднена, потому что обычно вам нужны отладочные символы и / или инструменты, чтобы дать инструменту знать, когда и для чего была выделена память объекта (AFAIK MS предлагает «проверено»строит "винду, а не офис").Это правда, что библиотека типов COM и перехватывающие стандартные API-интерфейсы могут помочь - попробуйте загрузить пробную версию такого инструмента, как AQTime , и посмотрите, может ли он вам помочь - я никогда не пытался использовать его таким образом.

...