这是Orchard中多线程的常见问题。
我有一个带控制器的模块,提供执行数据库同步的操作,这需要很长时间。该动作基本上在几百个项目上执行for循环,而每个项目可以独立处理/同步。
在研究如何提高性能时,我遇到了几种可能的解决方案
async
/ await
关键字Orchard.Environment.Work<>
Orchard.Caching.IParallelCacheContext
Orchard.Caching.ITask
async
控制器操作(还结合返回值Task<>
)还有更多。
在不绕过Orchard中已实现/提供的可能优化的情况下,提高for循环性能的最佳方法是什么?
答案 0 :(得分:0)
async
/ await
/ Task<>
在这里得到了很好的解释https://stackoverflow.com/a/30574578/3936440
并行for循环可能有效但需要某种同步(例如使用lock
关键字)
Orchard.Caching.*
不适用于实现多线程内容,因为命名空间已暗示
Work<>
适用于延迟依赖注入,请参阅What is the Work<> class for in Orchard CMS?