在短时间内运行一种方法1000次

时间:2010-05-28 16:51:34

标签: c# asp.net

假设我们正在构建一些公共服务来抓取用户的设置(他想要执行调用的服务器,用户和密码),登录到该服务器并进行一些处理......

  • 此过程大约需要15秒才能完成
  • 每个用户都有不同的设置(server / user / pwd),因此需要针对每个用户运行

如果1000个用户告诉系统在 1:00 PM

运行该方法

我如何确保在下一个 15分钟中处理该方法?

这个小问题的正确方法应该是什么?

我认为我需要异步执行某些操作,并行处理可以加快速度,可能会限制进程,可能每30秒执行100次调用?

我从未做过这样的事情,并希望得到您对想法和未来问题的反馈只是为了花费100个小时的工作并意识到我走错了路:(

谢谢。


加入

  

唯一需要考虑的是这应该是100%的网络解决方案。

2 个答案:

答案 0 :(得分:1)

如果对方法的一次调用不影响另一个方法调用的结果(这里似乎就是这种情况),那么并行编程似乎就是这样。

考虑不直接在asp.net应用程序中处理这个问题,而是将这些请求放在队列上并让另一个进程(Windows服务可能是一个很好的候选者)将项目从队列中拉出来进行处理。 Windows服务可以有多个线程,并且可以同时从队列中提取尽可能多的项目,因为有可用的处理线程。使用适当的排队机制,如果需要,Windows服务可以在单独的硬件上运行,以实现您的性能目标。

您可以让原始网页使用例如查询结果如果需要,Ajax可以提供用户反馈。

更新:

Microsoft拥有recommended a pattern可用于托管环境的长期运行任务。

答案 1 :(得分:1)

嗯,1000 * 15秒超过4小时,因此如果并行化批次,您只能在15分钟的时间范围内完成整个任务。

我会设置一个队列,并从该队列中获取足够数量的线程或进程。

您可以使用数据库表或MSMQ定义具有Queue<T>或进程外进程的进程内队列。

如果你不想编写多线程代码,你可以在不同的机器上运行一堆不同的进程,所有进程都来自同一个队列。

控制台应用程序可以做到这一点,但Windows服务肯定也是一种替代方案。