我有一个IHttpHandler,它执行三个方法:

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

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

    此致Thorsten

    最佳答案

    当然可以。不过,真正的乐趣是弄清楚它是否明智。如果工作是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()中的代码将无法直接访问任何与请求相关的上下文。理想情况下,首先(在主要的HTTP请求线程上)收集Method_B()需要的所有信息,然后通过与http上下文无关的简单数据类型将其传递。同样,使用线程局部数据的任何内容(例如TransactionScope)都不会自动流入Method_B()

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

    10-10 12:44