Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];

Вниз

Утечка памяти в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.037 c
1-1098907717
Jolik
2004-10-28 00:08
2004.11.14
Как сделать в TListView...


1-1099305872
Mishenka
2004-11-01 13:44
2004.11.14
Как нарисовать ломаную линию на форме?


1-1099400578
Strimer
2004-11-02 16:02
2004.11.14
Возможно ли разместить вертикальный текст на кнопке?


6-1094027486
bl4ck_w1nd
2004-09-01 12:31
2004.11.14
комп+модем+телефон


3-1098090555
Layner
2004-10-18 13:09
2004.11.14
Помогите парсировать 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
Английский Французский Немецкий Итальянский Португальский Русский Испанский