线程池挂起网页

时间:2011-06-02 04:15:31

标签: c# asp.net

我正在从水晶报告中生成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 个答案:

答案 0 :(得分:1)

您不应该依赖ASP.NET中的线程池。有许多的原因。主要的一点是,ASP.NET可以并且将会随时回收为您的页面提供服务的应用程序池,包括页面请求之间,同时生成PDF。如果发生这种情况,您的PDF生成将在中途停止。

解决此问题的正确方法是将PDF生成请求卸载到更可控的地方,通常是Windows服务(可以在同一台机器上运行)。一种常见的技术是使用MSMQ或其他持久的事务性队列机制来控制Web服务器和PDF生成器实例池之间的通信,可能在多台机器上。

关于回发问题,我认为您需要提供更多有关我们可以帮助您的信息。