【发布时间】:2012-01-06 09:22:55
【问题描述】:
我有以下场景:
我们有一个生成 PDF 报告的 ASP.Net 网站。要生成 PDF 报告,我们需要进行多次 Web 服务调用(每次调用都会返回一部分数据)。大多数调用都指向同一个端点,但方法和参数不同。为了提高性能,我们想到了以下两种方法:
- 公开一个接受所有单独调用参数的 Web 服务操作。在内部,这个方法一个一个地调用每个方法;完成后,它将所有响应打包到一个集合中并将其发回。然后 ASP.Net 网页接收响应列表并将其解包并生成报告。
- 从 ASP.Net 应用程序并行调用 Web 服务方法。完成所有并行调用后,收集所有响应并生成 PDF。
起初,第二种方法看起来很优雅;问题是,我们如何进行并行 Web 服务调用。 Thread.QueueUserWorkItem 不是这里建议的好选择: Using ThreadPool.QueueUserWorkItem in ASP.NET in a high traffic scenario 和 http://williablog.net/williablog/category/Scalability.aspx
使用 new Thread() 创建新线程也不是很好,正如这里建议的那样: http://blogs.msdn.com/b/tmarq/archive/2010/04/14/performing-asynchronous-work-or-tasks-in-asp-net-applications.aspx
此外,Web 应用程序代码由 UI 和调用 Web 服务方法的业务逻辑层分层。该站点不是一个负载很重的站点,大约有 200 个并发用户。
请求帮助提出改进 pdf 生成过程性能的建议。
感谢和问候
维卡斯
【问题讨论】:
-
据我所知,生成的 web 服务客户端类会生成 web 服务调用的异步版本。您是否尝试过使用这些而不是采用多线程方式?
标签: asp.net multithreading parallel-processing