Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.23;
Скачать: CL | DM;

Вниз

Помогите, пожалуйста предотвратить утечку памяти.   Найти похожие ветки 

 
^Sanya ©   (2002-12-14 16:30) [0]

Как освободить объкт, созданный с помощью CreateOleObject ?

Пример:

var
ExcelApp: Variant;
begin
ExcelApp := CreateOleObject("Excel.Application");
try
...
finally
//как освободить ExcelApp, а то остаётся довольно большой процесс в памяти. Free, FreeAndNil не работают.
end;


В Справке написано "you can release the interface by assigning the Unassigned constant to that Variant."
Это как: "присвоить ExcelApp пустую константу"?

Заранее блгодарен.


 
sniknik ©   (2002-12-14 16:36) [1]

в примерах делают так
var
MSWord: Variant;
begin
...
MSWord := CreateOleObject("Word.Basic");
...
MSWord := Unassigned;
...

end;


 
^Sanya ©   (2002-12-14 16:51) [2]


> sniknik © (14.12.02 16:36)

Пример я давно видел, он, к сожалению, мне не помог.
Может это не мой глюк, но:
в XP я могу легко смотреть на список процессов.
При Unassigned и не только Excel.exe всё равно остаётся в процессах(примерно 8Мб занимает!), пока я его сам не "убью".
Может проблема в OfficeXP?
Можно легко "валить" процесс excel.exe, но это как-то не по-человечески...
Как же быть?
Пожалуйста, помогите, горю...


 
Song ©   (2002-12-14 16:55) [3]

А чем тебе критично что он останется?
UnAssigned вовсе не значит, что процесс удалится совсем, а значит что его адресное пространство теперь не закреплено и может заниматься по усмотрению системы (очень часто занимается тем же объектом Variant).


 
^Sanya ©   (2002-12-14 17:24) [4]


> Song © (14.12.02 16:55)

Мне-то ничем, просто я думал, что память остаётся зарезервированной.
Но дело ещё и в том, что при повторении операции создаются ещё новые процессы и замещения не происходит(10 раз подряд запустил и проверил).
У меня 512Мб RAM, может её много и каждый раз WinXP резервирует новое пространство?
И ещё: в мониторе состояния RAM последняя(свободное пространство) уменьшается на пару-тройку мегов с каждым проходом подпрограммы и тоже самое с файлом подкачки(увеличивается) => явно видны последствия нескольких процессов.

Ещё у меня есть строка
WorkSheet := ExcelApp.Workbooks[1].WorkSheets[1];
но по-моему, она тут не причём.

Как быть?
ИМХО, это критично.


 
asmith   (2002-12-14 17:46) [5]

ExcelApp.Quit; // закрываешь саму апликацию Excel
ExcelApp := Unassigned; // разрушаешь интерфейсную ссылку на нее


 
^Sanya ©   (2002-12-14 18:22) [6]


> asmith (14.12.02 17:46)

Огромное Вам спасибо!
Утечек больше нет.



Страницы: 1 вся ветка

Текущий архив: 2002.12.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
14-74902
Agent Delphi
2002-11-30 20:34
2002.12.23
Модем и факс модем


3-74565
Shaman
2002-12-03 17:21
2002.12.23
Значение поля кот. было до обновления в триггере FOR UPDATE


1-74836
Leny
2002-12-11 13:45
2002.12.23
Создание своего значка


4-75037
Semion
2002-11-04 08:38
2002.12.23
Путь к проге


4-75051
v0land
2002-11-08 13:16
2002.12.23
Память занимаемая программой?