清除CrystalReportsReportDocument对象使用的资源的最佳方法是什么?我正在开发一个使用CrystalReports进行报告的应用程序。它在ReportDocument对象中打开给定的报表,执行它需要执行的操作,然后关闭报表。using(varreport=OpenReport(reportSourceInfo)){//处理报告report.Close();OpenReport方法对源文件进行一些验证并返回一个打开的ReportDocument对象。测试表明此代码按预期运行并且似乎没有任何问题。我真正建议的问题是,当我对报告项目进行代码分析(CA)构建时,我收到以下CA消息:CA2202:Microsoft.Usage:Object'report'canbeusedmultipletimesinmethod'CrystalReportingProvider.ReportExecute(ReportSourceInformation)'处理。为避免生成System.ObjectDisposedException,不应对一个对象多次调用Dispose。现在显然我可以更改代码,这样我就不会收到此CA警告,但我的问题是我应该这样做吗?CrystalReportsReportDocument.Close()方法是否正确处理资源清理?该消息似乎表明Close方法调用了Dispose方法,但事实并非如此。任何建议将不胜感激。好吧,根据这个,“Close()...releases[s]报告已用内存。”这表明Close()调用Dispose(),因此同时使用using语句和Close()是多余的。虽然网络上有大量关于正确使用内存和在任务完成时相应清理已用内存的信息,但在MSDN中:IDisposable.Dispose或Stackoverflow:例如处理和设置为空。这导致了流行的编码约定,如果你可以调用Dispose,就这样做。此约定适用于FileStreams和SqlDataReader(以及其他)对象,它们包含Close和Dispose方法,并且调用Dispose调用Close。我没有考虑的是“水晶因素”。爱他们或厌恶他们,他们做事……不同。在对SAPSDN文章的第二次回复中进行了更多在线搜索后,似乎有SAP员工发布了Close方法的代码。如您所见,它还在清除和处理构成ReportDocument对象的所有元素后调用ReportDocument.Dispose方法。尽管如此,在不知道Dispose方法是如何实现的情况下(正确的,因为代码确实以其当前形式工作),您应该编写适当的协定并调用Dispose方法或在Using语句中声明它。只需抑制CA警告即可。C#学习教程就是这些:清除CrystalReportsReportDocument对象使用的资源的最佳方法是什么?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
