Форум: "Основная";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];
ВнизПомогите, пожалуйста предотвратить утечку памяти. Найти похожие ветки
← →
^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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c