DBContext SaveChanges如何在内部工作?

时间:2012-07-09 14:25:23

标签: sql-server entity-framework dbcontext

使用Entity Framework和SQL Server 2008,我们有一个应用程序可以写入大量数据,比如说每分钟1000行,每个都在他们自己的DBContext.saveChanges调用中(我们没有将它们一起批处理)< / p>

问题是我们的写作落后了。到了事情似乎正在挣扎。例如,我们将在两分钟内用新行调用saveChanges几千次,并且不会进行一次写入,然后突然间我们会得到一些写入(但很多都完全丢失)。 / p>

我们已经采用了SQL跟踪,并且发现即使有10%的saveChanges调用,SQL也没有收到写入命令。

所以看起来在saveChanges和SQL Server之间存在一个问题。我想知道这个电话是如何运作的。它是否使用线程池?排队?我们可能会超支的一些缓冲区?也许它因为写入量而无声地失败了?

MSDN在解释这些东西实际上是如何工作方面毫无用处

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

我不知道它是如何在内部工作的,但是通过这种重载,您最好将数据插入队列并使用一个或多个(但有限的)线程清空队列并写入数据库。您可以测试和调整线程数量,这样就不会丢失数据。