EF6 two contexts vs. single context with two awaits(EF6 两个上下文与具有两个等待的单个上下文)
问题描述
以下哪一种是提高性能的更好方法?注意:对于某些操作,我最多可以执行五个独立的查询.
Which of these is a better approach for performance? Note: For some operations I have up to five independent queries to execute.
对比
不用等待就使用相同的上下文会很棒,但 this answer 提到这是不可能的.
It would be great to use the same context without awaits, but this answer mentions that is not possible.
推荐答案
正如您所发现的,DbContext 不是线程安全的,因此真正并行运行查询的唯一选择是为每个线程创建一个新的 DbContext/任务.
As you found out, the DbContext is not thread safe, therefore the only option to really run the queries in parallel would be to create a new DbContext for each Thread/Task.
创建新 DbContext 的开销非常低.https://msdn.microsoft.com/en-us/library/cc853327.aspx
The overhead of creating a new DbContext is pretty low. https://msdn.microsoft.com/en-us/library/cc853327.aspx
由于对象将来自不同的 DbContext,为了进一步提高性能,我建议您也使用 NoTracking()
Since the object will come from different DbContexts and to further increase performance I recommend you also use NoTracking()
我用我拥有的数据库做了一个简单的测试程序:
I made a simple test program with a database I had:
输出是:
所以是的,选项 2 更快...
So yes, option 2 is faster...
这篇关于EF6 两个上下文与具有两个等待的单个上下文的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!