Главная страница
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.033 c
14-1098444056
S_C
2004-10-22 15:20
2004.11.14
Секурный ввод.


6-1093435835
Zyb
2004-08-25 16:10
2004.11.14
Вопрос тем, кто писал Proxy


3-1097746322
Настенька
2004-10-14 13:32
2004.11.14
Ширина столбцов


6-1094208842
ildar_kh
2004-09-03 14:54
2004.11.14
Перезагрузка фрейма


1-1098645916
CoolMan
2004-10-24 23:25
2004.11.14
Копирование n-ое кол-во файлов в один