【发布时间】:2015-03-24 17:57:41
【问题描述】:
我正在创建一个应用程序来将数据从旧数据库移动到新数据库(不同的架构)。我正在使用Visual Studio 2013、C#、Entity Framework 5、Microsoft SQL Server 2012。此表 Customer 有超过 40,000 条记录。
private void TransferCustomer()
{
int counter = 0;
// Load all old customers
var oldCustomers = _oldRockDale.customers;
foreach (var oldCustomer in oldCustomers)
{
// Create new customer
...
// Modify something
...
// Add to collection
<New_database_entity>.Customers.Add(newCustomer);
// Insert to database for each 1000 records
counter++;
if (counter % 1000 == 0)
{
<New_database_entity>.SaveChanges();
}
}
// Insert the rest to database
<New_database_entity>.SaveChanges();
}
这是我的问题:这个函数运行得越来越慢。对于前 1000 条记录,只需大约 20 到 30 秒。但它会变得慢得多。然后,需要 1 多分钟才能到达 2000。
我的问题是:
- 为什么运行速度越来越慢?
- 有没有更好的方法来传输这样的大量数据?
更多信息:正如我在Output 窗口中观察到的那样:
- 只有 1 行表明 线程以代码 0 退出。
- 之后,有很多行说 thread exited with code 259。
非常感谢您的帮助。
【问题讨论】:
-
由于更改跟踪,它变得越来越慢。
-
我会尝试禁用它并等待结果。谢谢你的建议:)
-
更改跟踪最有用。您可能更愿意创建更多的数据库上下文(每 1,000 个实体一个)。
-
在我看来,四万行远不及“大”...顺便说一句:您可以使用 SQL Server Management Studio 轻松移动和转换数据(如果您的 DBMS 是 SQL Server,而您没有告诉我们)。
-
是的,我使用的是 SQL Server。我使用 C# 应用程序,因为我不擅长 SQL 并且有些数据需要修改。我和你有同样的想法,40k 行并不大。但为什么我的应用程序运行速度越来越慢?
标签: c# database entity-framework large-data