У меня есть оконная служба, в которой есть таймер, а таймер установлен на 1 минуту. Эта услуга работает 24 * 7 непрерывно, что дает прибл. 500-600 отчетов ежедневно. Он работает нормально, за исключением утечки памяти при генерации excel каждый раз. Ежедневно, что наблюдаю, память увеличивается на 100 МБ. Я удаляю объект reportdocument, но каким-то образом он не очищает память в полной мере. Пожалуйста, не могли бы кто-нибудь помочь в этом?
Ниже приведен метод, который используется для экспорта в Excel.
public static void GenerateExcel(string reportName, DataTable dtData, string fileName)
{
ExportOptions exportOpts = null;
ExcelFormatOptions excelFormatOpts = null;
DiskFileDestinationOptions diskOpts = null;
ReportDocument reportDocument = null;
try
{
// Creating ReportViewer Object
reportDocument = new ReportDocument();
exportOpts = new ExportOptions();
excelFormatOpts = new ExcelFormatOptions();
diskOpts = new DiskFileDestinationOptions();
reportDocument.FileName = reportName;
reportDocument.SetDataSource(dtData);
exportOpts = reportDocument.ExportOptions;
excelFormatOpts.ExcelUseConstantColumnWidth = true;
excelFormatOpts.ExcelTabHasColumnHeadings = true;
exportOpts.ExportFormatType = ExportFormatType.ExcelRecord;
exportOpts.FormatOptions = excelFormatOpts;
exportOpts.ExportDestinationType = ExportDestinationType.DiskFile;
diskOpts.DiskFileName = fileName;
exportOpts.DestinationOptions = diskOpts;
reportDocument.Export();
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (reportDocument != null)
{
reportDocument.Close();
reportDocument.Dispose();
reportDocument = null;
exportOpts = null;
excelFormatOpts = null;
diskOpts = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
}