c# - IHttpHandler : Speeding up performance with parallelism?

标签 c# asp.net multithreading

我有一个执行三个方法的 IHttpHandler:

  • a = 方法_A
  • b = 方法_B
  • c = Method_C(a,b)

方法A和方法B的计算是完全独立的。方法 C 使用方法 A 和 B 的结果。目前这些方法是按顺序执行的。为了获得更好的 IHttpHandler 整体性能,我的想法是并行计算方法 A 和 B。如果 A 和 B 已完成,则应启动方法 C。这可能吗?如何实现?

问候,托尔斯滕

最佳答案

当然有可能;不过,真正有趣的是弄清楚它是否明智。如果工作受 CPU 限制,那么对于少量请求它会扩展(例如,它在只有你的本地机器上看起来不错) - 但是,如果有很多请求其他并行请求,那么您实际上可能会降低性能(线程有开销,并且您的内核有限)。

如果您的请求数量较少(即您有足够的核心来并行处理负载而不会耗尽),或者如果工作主要是 IO 绑定(bind),那么您应该没问题。

只需为其中一项启动任务:

var task = new Task<ResultType>(() => Method_B());
task.Start();
var a = Method_A();
var b = task.Result;
Method_C(a, b);

请注意,这确实引入了一些相关问题 - 例如,Method_B() 中的代码将无法直接访问任何与请求相关的上下文。理想情况下,收集 Method_B() 需要的所有信息首先(在主要的 http 请求线程上),并通过与http上下文。同样,任何使用线程本地数据(例如 TransactionScope)的东西都不会自动流入 Method_B()

关于c# - IHttpHandler : Speeding up performance with parallelism?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7872292/

相关文章:

c# - session 在其他计算机上可见吗?

java - 当用户按下后退键时可以停止线程吗?

c# - CaSTLe 依赖注入(inject) 生活方式

c# - 为什么在 get 方法之前需要 IEnumerable<string> ?

c# 通用接口(interface)不可能实现

javascript - 在首页加载之前设置时区 cookie

如果从计时器任务调用,Android 对话框根本不显示

multithreading - 通过 golang 进行 gitlab 抓取的问题

c# - 我什么时候应该使用 sorteddictionary 而不是字典

C# 等价于 C++ 回调