У меня есть консольное приложение, которое создает PDF для набора записей. Ибо, если количество превышает 9000, возникает ошибка «Ошибка создания дескриптора окна». На уровне приложения я использую 6 потоков.
Как я заметил в диспетчере задач, дескрипторы увеличиваются, и пользовательские объекты также увеличиваются.
Я написал метод obj.Dispose, где бы я ни создавал объект. Итак, теперь мой вопрос заключается в том, как уменьшить количество пользовательских объектов и дескрипторов.
Я использую консольное приложение с 3.5 Framework на С#.
Обновлять:
Ниже приведен код, который я использовал
Thread FirstTreadPDFs = new Thread(() => objPDFsProcess.DoGeneratePDFsProcess());
FirstTreadPDFs.Start();
//Thread2 Thread SecondTreadPDFs = new Thread(() => objPDFsProcess.DoGeneratePDFsProcess()); SecondTreadPDFs.Start();
//Thread3 Thread ThirdTreadPDFs = new Thread(() => objPDFsProcess.DoGeneratePDFsProcess2()); ТретийTreadPDFs.Start();
//Thread4 Thread FourthTreadPDFs = new Thread(() => objPDFsProcess.DoGeneratePDFsProcess()); ЧетвертыйTreadPDFs.Start();
//Thread5 Thread FifthTreadPDFs = new Thread(() => objPDFsProcess.DoGeneratePDFsProcess1()); ПятыйTreadPDFs.Start();
FirstTreadPDFs.Join(); SecondTreadPDFs.Join(); ThirdTreadPDFs.Join(); ЧетвертыйTreadPDFs.Join(); FifthTreadPDFs.Join();
DataSet dsHeader1 = new DataSet();
//Pending Cusotmers need to get to generate PDFs
dsHeader1 = objCustStatementDAL.GetCustStatementdetailsForPDF(IsEDelivery, 1);
if (dsHeader1 != null && dsHeader1.Tables.Count > 0)
{
if (dsHeader1.Tables[0].Rows.Count > 0)
{
writerLog.WriteLine(DateTime.Now + " Trying to get Pending Records");
objPDFsProcess.DoGeneratePDFsProcess2();
writerLog.WriteLine(DateTime.Now + " Exit Trying to get Pending Records block");
}
}
dsHeader1.Dispose();
После выполнения 9000+ записей строка Exit Trying выполняется и останавливает приложение.
Где бы я ни использовал объект, я разместил метод Dispose.