如何在托管C ++中正确处理报表和查看器?

2020-09-19 00:24发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)问题是CR会泄漏内存,尤其是在使...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


问题是CR会泄漏内存,尤其是在使用查看器时。 我发现这篇文章描述了处置该内存的正确方法:

http://stackoverflow .com/questions/29643043/crystalreports-reportdocument-memory-leak-with-database-connections

在我的代码中,我使用的是此处描述的方法:

 http://www.codeproject.com/Articles/12308/Using-WinForms-controls-in-an-MFC-dialog 

问题是在C ++中,我无法调用-> Dispose()。 它告诉med改为调用析构函数〜ReportViewer。

有人可以提供一个示例,说明如何正确结束屏幕上的报告以释放所有内存吗? 这就是我现在所拥有的,它已经改善了以前的13Mb泄漏,使其现在低于1Mb:

 void CFloaterDlg :: OnClose()
 {
 CrystalDecisions :: CrystalReports :: Engine :: ReportDocument ^ Report;
 报告=(CrystalDecisions :: CrystalReports :: Engine :: ReportDocument ^)m_Viewer-> ReportSource;
 报告-> Close();
//
 m_Viewer-> ReportSource = nullptr;
 m_Viewer->〜CrystalReportViewer();
//删除m_Viewer;
//
 GC :: Collect();
 GC :: WaitForPendingFinalizers();
 GC :: Collect();
//
//
 CDialog :: OnClose();
//
 m_Viewer.DestroyWindow();
 DestroyWindow();
 }

 问题是如何以及何时销毁基础ReportDocument。 查看器是否保存数据副本? 即可以在查看器之前销毁ReportDocument吗?
2条回答
歪着头看世界
2020-09-19 01:21

仍然感到困惑。 当我在Crystal日志文件中看到此消息时,我将假定不再有资源在使用,并且垃圾回收将释放内存?

也。 我有点想知道我的原始问题中指出的ReportDocument和Viewer之间的关系。

。\ .. \ src\ crpe \ crpe.cpp:826,关闭引擎,关闭引擎使用次数后," 0"
 

一周热门 更多>