съедается ли память при PrepareReport()?
может мой вопрос может показаться глупым,но могли бы вы мне разъяснить одну ситуацию. пожалуйста,помогите.
я выполняю программу. каждый раз при нажатии на кнопку я обновляю отчет,т.е. заново считываю шаблон и вывожу туду значения массива динамически. и каждый раз при выполнении ф-и pReport->PrepareReport(true);
у меня возрастает память (я смотрю в диспетчере задач).
Это правильно,что при каждом выполнении этой функции выделяется еще память?
Дело в том,что моя программа не должна выключаться. Она постоянно работает и пользователь время от времени строит эти отчеты. Но раз каждый раз она возрастает. то получается,что она может дойти до какого-то пикового значения,когда памяти не останется. Я правильно рассуждаю? Как этот вопрос можно решить? может я что-то в коде забыла дописать?
код программы здесь(программа написана на C++):
типы данных:
IfrxReportPtr pReport;
IfrxUserDataSetPtr pDataSet;
CfrxPreview m_frxPreview
обработчик нажатия на кнопку:
pReport->SelectDataset(false, pDataSet);
pReport->LoadReportFromFile(_bstr_t("2.fr3"));
pReport->SelectDataset(true, pDataSet);
CComQIPtr<IfrxComponent> Component(pReport);
CComQIPtr<IfrxComponent> MasterData;
MasterData = Component->FindObject(_bstr_t(_T("MasterData1")));
CComQIPtr<IfrxDataBand> DataBand(MasterData);
CComQIPtr<IfrxDataSet> MasterDataSet(pDataSet);
DataBand->DataSet = MasterDataSet;
m_frxPreview.put_Report(pReport);
m_frxPreview.Lock();
pReport->PrepareReport(true);
m_frxPreview.Unlock();
pReport->ShowPreparedReport();
я выполняю программу. каждый раз при нажатии на кнопку я обновляю отчет,т.е. заново считываю шаблон и вывожу туду значения массива динамически. и каждый раз при выполнении ф-и pReport->PrepareReport(true);
у меня возрастает память (я смотрю в диспетчере задач).
Это правильно,что при каждом выполнении этой функции выделяется еще память?
Дело в том,что моя программа не должна выключаться. Она постоянно работает и пользователь время от времени строит эти отчеты. Но раз каждый раз она возрастает. то получается,что она может дойти до какого-то пикового значения,когда памяти не останется. Я правильно рассуждаю? Как этот вопрос можно решить? может я что-то в коде забыла дописать?
код программы здесь(программа написана на C++):
типы данных:
IfrxReportPtr pReport;
IfrxUserDataSetPtr pDataSet;
CfrxPreview m_frxPreview
обработчик нажатия на кнопку:
pReport->SelectDataset(false, pDataSet);
pReport->LoadReportFromFile(_bstr_t("2.fr3"));
pReport->SelectDataset(true, pDataSet);
CComQIPtr<IfrxComponent> Component(pReport);
CComQIPtr<IfrxComponent> MasterData;
MasterData = Component->FindObject(_bstr_t(_T("MasterData1")));
CComQIPtr<IfrxDataBand> DataBand(MasterData);
CComQIPtr<IfrxDataSet> MasterDataSet(pDataSet);
DataBand->DataSet = MasterDataSet;
m_frxPreview.put_Report(pReport);
m_frxPreview.Lock();
pReport->PrepareReport(true);
m_frxPreview.Unlock();
pReport->ShowPreparedReport();
Комментарии
У меня возникла аналогичная проблема. После вызова PrepareReport пробегаю по элементам отчета, анализирую их. После этого мне нужно очистить память и перейти к другому отчету. Ни Clear, ни Free не помогают. Точнее Free убивает отчет, но память освобождается не полностью.
Вы решили как-то проблему?