一連のレコードの PDF を作成するコンソール アプリケーションを使用しています。カウントが 9000 以上の場合、「ウィンドウ ハンドルの作成中にエラーが発生しました」というエラーが発生しました。アプリケーション レベルでは、6 つのスレッドを使用しています。
タスク マネージャーで観察したように、ハンドルが増加し、ユーザー オブジェクトも増加しています。
オブジェクトを作成した場所に obj.Dispose メソッドを記述しました。だから今私の質問は、ユーザー オブジェクトとハンドルを減らす方法です。
C# で 3.5 Framework のコンソール アプリケーションを使用しています。
アップデート:
以下は私が使用したコードです
Thread FirstTreadPDFs = new Thread(() => objPDFsProcess.DoGeneratePDFsProcess());
FirstTreadPDFs.Start();
//Thread2 スレッド SecondTreadPDFs = new Thread(() => objPDFsProcess.DoGeneratePDFsProcess()); SecondTreadPDFs.Start();
//Thread3 スレッド ThirdTreadPDFs = new Thread(() => objPDFsProcess.DoGeneratePDFsProcess2()); ThirdTreadPDFs.Start();
//Thread4 スレッド FourthTreadPDFs = new Thread(() => objPDFsProcess.DoGeneratePDFsProcess()); FourthTreadPDFs.Start();
//Thread5 スレッド FifthTreadPDFs = new Thread(() => objPDFsProcess.DoGeneratePDFsProcess1()); FifthTreadPDFs.Start();
FirstTreadPDFs.Join(); SecondTreadPDFs.Join(); ThirdTreadPDFs.Join(); FourthTreadPDFs.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メソッドを配置したオブジェクトを使用する場所。