C# EntityFramework能否一次性发送所有查询?

C# EntityFramework能否一次性发送所有查询?,c#,mysql,multithreading,entity-framework,C#,Mysql,Multithreading,Entity Framework,我们有一个系统,有8张桌子。在每个上下文中,我们将插入/更新8个表中的几个。正如我在日志中看到的,entity framework正在按顺序逐个发送多个查询以更新每个表。实体框架是否有一种方法可以一次性将所有查询发送到数据库并获取状态? 在我看来,这将大大提高性能,因为我们避免了网络呼叫 仅供参考,我们的系统是一个多线程系统,每个线程都有自己的上下文来更新这8个表。由于对单个上下文(即线程)有多个对DB的查询,所以它变得非常缓慢 欢迎提出任何建议,不胜感激。。提前感谢…从单个上下文对数据库进行多

我们有一个系统,有8张桌子。在每个上下文中,我们将插入/更新8个表中的几个。正如我在日志中看到的,entity framework正在按顺序逐个发送多个查询以更新每个表。实体框架是否有一种方法可以一次性将所有查询发送到数据库并获取状态? 在我看来,这将大大提高性能,因为我们避免了网络呼叫

仅供参考,我们的系统是一个多线程系统,每个线程都有自己的上下文来更新这8个表。由于对单个上下文(即线程)有多个对DB的查询,所以它变得非常缓慢


欢迎提出任何建议,不胜感激。。提前感谢…

从单个上下文对数据库进行多个查询可能不是查询执行缓慢的原因。通常,大多数项目都有类似的场景,其中单个数据库上下文使用实体框架运行多个DML查询

请使用SQL探查器来识别导致问题的查询。可能是一些错误的连接或无效条件造成了问题


您还必须验证数据库服务器配置;也就是说,您的服务器可以处理多大的负载。

从单个上下文对数据库执行多个查询可能不是查询执行缓慢的原因。通常,大多数项目都有类似的场景,其中单个数据库上下文使用实体框架运行多个DML查询

请使用SQL探查器来识别导致问题的查询。可能是一些错误的连接或无效条件造成了问题


您还必须验证数据库服务器配置;也就是说,您的服务器可以处理多少负载。

您可以尝试.NET实体框架扩展(不是免费的)

它们一次批处理多个查询,并使用批量操作来提高性能

以下是他们网站上的一个示例:

// Upgrade SaveChanges performance with BulkSaveChanges
var context = new CustomerContext();
// ... context code ...

// Easy to use
context.BulkSaveChanges();

// Easy to customize
context.BulkSaveChanges(operation => operation.BatchSize = 1000);

您可以尝试.NET实体框架扩展(非免费)

它们一次批处理多个查询,并使用批量操作来提高性能

以下是他们网站上的一个示例:

// Upgrade SaveChanges performance with BulkSaveChanges
var context = new CustomerContext();
// ... context code ...

// Easy to use
context.BulkSaveChanges();

// Easy to customize
context.BulkSaveChanges(operation => operation.BatchSize = 1000);

我认为这是他们想在EF7中介绍的东西请分享你的代码我认为这是他们想在EF7中介绍的东西请分享你的代码如果我只有一个线程,那么上下文保存需要7毫秒。但是如果我有几百个线程(每个线程都有自己的上下文并尝试保存到DB)上下文保存平均需要300毫秒。这可能是数据库问题,也可能是每个线程的多个网络调用(sql查询)。。我们确信数据库端的数据和索引是正确的,因此我们怀疑这里的网络延迟..你是正确的。。查询执行缓慢可能基于网络延迟,也可能与硬件相关(即数据库服务器的配置)。是,所以我们花了大量的时间来提高数据库的性能,我们已经到了无法再提高的地步,所以现在我们正在考虑改善网络延迟。当我说数据库服务器配置时,我不是指数据库。我的意思是四核、八核或六核处理器,你有多少ram,服务器上的正常负载是多少等等。。。。例如,具有4Gb ram的四核处理器将永远无法承受具有16gb ram的六核处理器所能承受的负载我们拥有128GB的巨大ram容量。。我将SQL最大内存大小限制为90GB。。。除了我正在运行的应用程序之外,不会有任何其他负载…如果我只有一个线程,那么上下文保存需要7毫秒。但是如果我有几百个线程(每个线程都有自己的上下文并尝试保存到DB),则上下文保存平均需要300毫秒。这可能是DB问题,也可能是多个网络调用(sql查询)每个线程..我们确信数据库端的数据和索引是正确的,因此我们怀疑这里的网络延迟..您是正确的..查询执行缓慢可能基于网络延迟,也可能与硬件相关(即数据库服务器的配置)是的,所以我们花了大量的时间来提高数据库的性能,我们达到了无法再提高的程度,所以现在我们正在考虑改善网络延迟。当我说数据库服务器配置时,我指的不是数据库。我指的是四核、八核或六核处理器,你有多少ram,服务器上的正常负载等tc…例如,具有4Gb ram的四核处理器将永远不会承担具有16gb ram的六核处理器所能承担的负载我们有128 GB的巨大ram大小。我将SQL最大内存大小限制为90GB…除了我正在运行的应用程序外,不会有任何其他负载。。。