ADO не освобождает память
От: AlekseyCh www.nlg.ru
Дата: 30.11.01 07:50
Оценка:
При обращении к сторед процедурам через Command
происходит утечка памяти. Никак не могу разобраться в чем дело.

Код следующий

_variant_t vtEmpty(DISP_E_PARAMNOTFOUND, VT_ERROR);
_variant_t vtEmpty2(DISP_E_PARAMNOTFOUND, VT_ERROR);


_CommandPtr m_Cmd;
m_Cmd.CreateInstance(__uuidof(Command));
m_Cmd->ActiveConnection=Conn;
m_Cmd->CommandType=adCmdStoredProc;

m_Cmd->CommandText="LogAdd";
m_Cmd->Parameters->Refresh();
m_Cmd->Parameters->GetItem(_variant_t((long)1))->Value=_variant_t(strURL);
m_Cmd->Parameters->GetItem(_variant_t((long)2))->Value=_variant_t(strMsg);
m_Cmd->Execute(&vtEmpty, &vtEmpty2,adCmdUnknown);

m_Cmd=NULL;
Re: ADO не освобождает память
От: TSS Россия http://www.sdl.ru
Дата: 30.11.01 08:00
Оценка:
Здравствуйте AlekseyCh, Вы писали:

AC>При обращении к сторед процедурам через Command

AC>происходит утечка памяти. Никак не могу разобраться в чем дело.

AC>Код следующий


AC> _variant_t vtEmpty(DISP_E_PARAMNOTFOUND, VT_ERROR);

AC> _variant_t vtEmpty2(DISP_E_PARAMNOTFOUND, VT_ERROR);


AC> _CommandPtr m_Cmd;

AC> m_Cmd.CreateInstance(__uuidof(Command));
AC> m_Cmd->ActiveConnection=Conn;
AC> m_Cmd->CommandType=adCmdStoredProc;

AC> m_Cmd->CommandText="LogAdd";

AC> m_Cmd->Parameters->Refresh();
AC> m_Cmd->Parameters->GetItem(_variant_t((long)1))->Value=_variant_t(strURL);
AC> m_Cmd->Parameters->GetItem(_variant_t((long)2))->Value=_variant_t(strMsg);
AC> m_Cmd->Execute(&vtEmpty, &vtEmpty2,adCmdUnknown);

Рекордсет, возвращаемый m_Cmd->Execute нужно закрывать.

AC> m_Cmd=NULL;
Signed, [TSS] /SDL/
Re[2]: ADO не освобождает память
От: AlekseyCh www.nlg.ru
Дата: 30.11.01 08:36
Оценка:
Здравствуйте TSS, Вы писали:

AC>>При обращении к сторед процедурам через Command

AC>>происходит утечка памяти. Никак не могу разобраться в чем дело.


TSS>Рекордсет, возвращаемый m_Cmd->Execute нужно закрывать.


К сожелению это не помогло
Память отжирается после выполнения команды
AC>> m_Cmd->Parameters->Refresh();

И вызываемая сторед процедура не возвращает рекордсета
Re[3]: ADO не освобождает память
От: IT Россия linq2db.com
Дата: 30.11.01 15:32
Оценка:
Здравствуйте AlekseyCh, Вы писали:

AC>К сожелению это не помогло

AC>Память отжирается после выполнения команды
AC>>> m_Cmd->Parameters->Refresh();

О какой памяти идёт речь? О той которая видна в ТаскМанагере? Или что-то выдаёт BoundsChecker?
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: ADO не освобождает память
От: Аноним  
Дата: 30.11.01 15:57
Оценка:
Здравствуйте IT, Вы писали:

IT>Здравствуйте AlekseyCh, Вы писали:


AC>>К сожелению это не помогло :(

AC>>Память отжирается после выполнения команды
AC>>>> m_Cmd->Parameters->Refresh();

IT>О какой памяти идёт речь? О той которая видна в ТаскМанагере? Или что-то выдаёт BoundsChecker?

О той что в ТаскМанагере
Re[5]: ADO не освобождает память
От: IT Россия linq2db.com
Дата: 30.11.01 16:34
Оценка:
Здравствуйте Аноним, Вы писали:

IT>>О какой памяти идёт речь? О той которая видна в ТаскМанагере? Или что-то выдаёт BoundsChecker?

А>О той что в ТаскМанагере

Тогда сильно не переживай :) Ты всё равно с этим поделать ничего не сможешь.
Если нам не помогут, то мы тоже никого не пощадим.
Re: ADO не освобождает память
От: Captain_Blood  
Дата: 19.12.02 07:00
Оценка:
Здравствуйте, AlekseyCh, Вы писали:

AC>При обращении к сторед процедурам через Command

AC>происходит утечка памяти. Никак не могу разобраться в чем дело.

AC>Код следующий


AC> _variant_t vtEmpty(DISP_E_PARAMNOTFOUND, VT_ERROR);

AC> _variant_t vtEmpty2(DISP_E_PARAMNOTFOUND, VT_ERROR);

AC>

AC> _CommandPtr m_Cmd;
AC> m_Cmd.CreateInstance(__uuidof(Command));
AC> m_Cmd->ActiveConnection=Conn;
AC> m_Cmd->CommandType=adCmdStoredProc;

AC> m_Cmd->CommandText="LogAdd";

AC> m_Cmd->Parameters->Refresh();
AC> m_Cmd->Parameters->GetItem(_variant_t((long)1))->Value=_variant_t(strURL);
AC> m_Cmd->Parameters->GetItem(_variant_t((long)2))->Value=_variant_t(strMsg);
AC> m_Cmd->Execute(&vtEmpty, &vtEmpty2,adCmdUnknown);

AC> m_Cmd=NULL;


На форуме Micro$ofta был задан аналогичный вопрос, на который кто-то из Microsoft Developer Support дал следующий ответ:

At a guess, what you're seeing is standard Jet Caching. Jet doesn't write
out changes to the file right away. Instead, it makes the changes to cached
data in RAM and then writes the data out later when it gets time. So if you
have a lot of activity you can grow the cache up to the max size. When it
hits the max, it will level off as jet ups the priority of the flushing
thread.

So. Are you seeing any out of memory errors? Don't trust the task manager
display, that's not meant to be accurate. What we do is bring up perfmon
and tell it to watch Private Bytes and Virtual Bytes of your process. If
you see one of them grow continually until you get out of memory errors,
then you have a leak. If they grow for a while and then level off and you
never get errors, then that's just Jet Caching
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.