entity-framework - PLINQ 到 Entity Framework : why shouldn't it be used?

标签 entity-framework entity-framework-6 plinq

我在某处读到你不应该在 Entity Framework 或 SQL 上使用 PLINQ。我不记得我在哪里读到它或原因是什么,但我做了一些实验。使用传统的 LINQ to Entity Framework 加载一个预计会变得非常大的数据库表目前需要 12 到 13 毫秒。但是,当我添加 .AsParallel() 时,相同的查询会在 2 到 4 毫秒内运行,并且得到完全相同的结果。

因此,如果我使用 PLINQ 更快地获得相同的结果,那么使用 PLINQ to Entity Framework 有哪些陷阱?

最佳答案

有一些危险,即 DbContext 不能被多个线程同时访问。而且通常没有什么好处,即 PLINQ 将同步对 IEnumerable.MoveNext() 的访问,它完成读取数据、创建实体和与更改跟踪器交互的所有工作。

但是,如果您对返回的实体做了大量工作,而不会触及 DbContext(即没有 SaveChanges()、没有延迟加载等),您可以使用 PLINQ。

但是我能想到的大多数示例都可以通过将操作构建到原始查询中或通过执行服务器端原始 SQL 来进行更好的优化。

因此,如果您有一堆 CPU 密集型域逻辑,您需要跨实体集合运行,则可以跨结果并行操作,但最好在并行执行块内创建一个单独的 DbContext。

关于entity-framework - PLINQ 到 Entity Framework : why shouldn't it be used?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48809105/

相关文章:

c# - 使用 AsSequential 以保持顺序

c# - 在 foreach 中访问 LINQ Select 中使用的值

.net - 为EF提供即时的自定义数据库提供程序

unit-testing - FakeItEasy DbSet/IQueryable<T> - Entity Framework 6

c# - ExecuteSqlCommand 与 SqlQuery 有什么区别?什么时候做数据库访问?

c# - Entity Framework 代码优先数据库恢复模型

.net - .NET 4.0和4.5中损坏的PLINQ ForAll

c# - 如何模拟代码优先策略创建的 Entity Framework 数据库?

c# - ModelState 有效,但是当我保存数据时,我在有错误的entityValidationErrors 中得到它

c# - Entity Framework Core 2.0 添加迁移不生成任何内容