3

使用带有 SQL Server 2008 的实体框架,我们有一个写入大量数据的应用程序,例如每分钟 1000 行新行,每行都在它们自己的 DBContext.saveChanges 调用中(我们没有将它们批处理在一起)

问题是我们的写作落后了,远远落后。以至于事情似乎在颠簸。例如,我们将在两分钟内用新行调用 saveChanges 数千次,并且不会进行一次写入,然后突然之间我们将获得少量写入(但很多都完全丢失了)。

我们进行了 SQL 跟踪,发现 SQL 甚至在 10% 的 saveChanges 调用中都没有收到写入命令。

因此,在 saveChanges 和 SQL Server 之间似乎存在问题。我想知道这个电话是如何工作的。它使用线程池吗?排队?一些我们可能会溢出的缓冲区?也许由于写入量很大,它默默地失败了?

MSDN 在解释这些东西的实际工作原理方面毫无用处

4

2 回答 2

2

阅读msdn 中的性能注意事项,并查看Fastest Way of Inserting in Entity Framework

于 2012-07-09T15:08:23.813 回答
0

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

于 2012-07-09T14:29:26.653 回答