2011-06-02 92 views
0

我從水晶報表生成1000個PDF文件。一個接一個地生成PDF需要時間,這會降低性能。爲了提高性能,我使用的ThreadPooling以更快的方式生成PDF,但PDF生成完成後。我的網頁控件不會觸發事件,即我有一個單選按鈕(autopostback = true),所以我應該在onchange事件發生時觸發一個事件,但我不明白最近發生了什麼錯誤,它不會引發事件?我在asp.net中使用threadpool錯誤的方式,還是有任何其他類可用與threadpool相同的作品?線程池掛起網頁

dynamic obj = new { strvalue = strvalue, SimulActual = SimulActual, IsCrewRPT = IsCrewRPT, rowcount = rowcount, FileName = FileName, RankP = RankP, RankCDP = RankCDP, intRowNo = intRowNo, rpt = rpt, ToYear = ToYear, Cdc_no = Cdc_no, TotalPDF = TotalPDF, TotalRowcount1 = TotalRowcount1 }; 
        ThreadPool.QueueUserWorkItem(new WaitCallback(PDFActualOffThreadWithPanCard), obj); 
        ThreadPool.SetMaxThreads(10, 5); 

        obj = null; 

回答

1

您不應該依賴ASP.NET中的線程池。有許多的原因。最主要的是,ASP.NET可以並且將隨時回收爲您的頁面提供服務的應用程序池,包括在頁面請求之間提供服務,同時生成PDF。如果發生這種情況,您的PDF生成將在中途停止。

解決此問題的正確方法是將PDF生成請求卸載到更可控的東西上,通常是一個Windows服務(可以在同一臺機器上運行)。一種常見的技術是使用MSMQ或另一種持久事務性隊列機制來控制Web服務器和一個PDF生成器實例池之間的通信,可能在多臺機器上進行通信。

至於回發的問題,我認爲您需要提供更多關於正在發生的事情的信息,以便我們爲您提供幫助。