Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: -0.978 c
1-1099339331
Skiter
2004-11-01 23:02
2004.11.14
Работа с TImages


3-1097751557
diabolik_krsk
2004-10-14 14:59
2004.11.14
Проверка наличия таблицы в БД Access через ADOConnection


3-1097651444
_sulent
2004-10-13 11:10
2004.11.14
Объединение ячеек


14-1098458364
Gero
2004-10-22 19:19
2004.11.14
Программы для тестирования железа


1-1098967297
Chlavik
2004-10-28 16:41
2004.11.14
Надо после QueryInterface как то уничтожать полученый интерфейс ?




   Наверх