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

Вниз

Утечка памяти в CAPICOM. Как бороться?   Найти похожие ветки 

 
Василий_М   (2004-10-29 10:11) [0]

Господа, есть проблема с утечrой памяти в CAPICOM. При вызове EnvelopedData.Encrypt не освобождается память от предыдущего вызова EnvelopedData.Encrypt.
В чем проблема, может кто сталкивался?

Ниже приведен код:

var EnvelopedData : IEnvelopedData;
begin
  EnvelopedData := CreateOleObject("CAPICOM.EnvelopedData") as IEnvelopedData;

  // тут заглядываем в хранилище и назначаем сертификат для EnvelopedData
  // ....... пропускаем ....
  // назначили сертификаты

  // шифрование
  for i := 0 to 1000 do
    begin
      EnvelopedData.Content := "большая строка(на пару тысяч байтов)";
      Result := EnvelopedData.Encrypt(CAPICOM_ENCODE_ANY); // тут подскакивает память
      // в предыдущей строке подскакивает память(то нормально)
      // но при следующем проходе цикла - предудущие затраты памяти должны,
      // казалось бы, освободиться
      // но не освобождаются и все, и при каждом проходе - копятся
    end;

  EnvelopedData := nil; // самое обидное - накопленная память не освобождается даже здесь

end;


 
Amoeba ©   (2004-10-29 11:17) [1]


> не освобождается память от предыдущего вызова EnvelopedData.Encrypt.

На чем основано сие утверждение?


 
Василий_М   (2004-10-29 11:26) [2]

>>На чем основано ...

Смотрю в диспетчере задач расход памяти процессом.  Строки довольно большого размера, поэтому скачок бросается в глаза.


 
Reindeer Moss Eater ©   (2004-10-29 11:27) [3]

"Если на клетке с тигром написано ...."
В общем не верь глазам своим.


 
Romkin ©   (2004-10-29 11:31) [4]

Винда сама думает, отдавать-не отдавать. Профайлером смотри :)


 
Василий_М   (2004-10-29 11:39) [5]

2 Reindeer Moss Eater

:), шутка хорошая, но тем не менее мне не на много легче.

Как я уже сказал, шифруются большие объемы. Поэтому, память съедается очень быстро со всеми вытекающими отсюда последствиями.
Просто хотелось бы выснить у тех, кто реализовывал подобную задачу - только у меня такое наблюдается или это уже было кем-то подмечено? Или я что-то упускаю?


 
Reindeer Moss Eater ©   (2004-10-29 11:43) [6]

Дык используй тогда прямо CryptoAPI


 
Василий_М   (2004-10-29 12:49) [7]

Хотелось бы выснить у тех, кто реализовывал подобную задачу - только у меня такое наблюдается или это уже было кем-то подмечено? Или я что-то упускаю?


 
Reindeer Moss Eater ©   (2004-10-29 12:55) [8]

тебе же сказали в [4]


 
Reindeer Moss Eater ©   (2004-10-29 13:00) [9]

При вызове EnvelopedData.Encrypt не освобождается память от предыдущего вызова EnvelopedData.Encrypt.

Это еще не признак утечки памяти.
Если последовательный многократный вызов приводит в итоге к съеданию всей памяти - это утечка.

А если диспетчер что то там показал после предыдущего вызова - это еще ничего не значит.


 
Василий_М   (2004-10-29 13:24) [10]

2 Reindeer Moss Eater
Это еще не признак утечки памяти.
Если последовательный многократный вызов приводит в итоге к съеданию всей памяти - это утечка.


Я специально продемонстрировал цикл для того чтобы показать "последовательный многократный вызов". Как раз при нем и имеет место быть "утечка".
Хорошо, спасибо и на этом, постараюсь разобраться в чем нем дело.



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

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

Наверх




Память: 0.49 MB
Время: 0.055 c
3-1097958612
saNat
2004-10-17 00:30
2004.11.14
"Архивация" БД Access


3-1098106003
Елена
2004-10-18 17:26
2004.11.14
Дата в dBAse


3-1097844183
Vemer
2004-10-15 16:43
2004.11.14
Необходимость наличия Primary Key


1-1099211684
Arnold
2004-10-31 11:34
2004.11.14
Как ограничить ввод в TEdit.


3-1097748970
MOV
2004-10-14 14:16
2004.11.14
Импорт таблиц