Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-74634
Beglec
2002-12-12 14:17
2002.12.23
QuickReport


7-75022
sego
2002-10-18 10:07
2002.12.23
можно ли програмно открыть доступ к дискам.


3-74615
Брат
2002-12-05 11:09
2002.12.23
Почему-то не находит функцию div....


14-74895
Дмитрий К.К.
2002-12-04 14:03
2002.12.23
Текстовый редактор


3-74556
Брат
2002-12-04 11:56
2002.12.23
Вопрос по SQL: как разделить нацело?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский