【问题标题】:Move large amount of data from old database to new database using Entity Framework 5使用 Entity Framework 5 将大量数据从旧数据库移动到新数据库
【发布时间】:2015-03-24 17:57:41
【问题描述】:

我正在创建一个应用程序来将数据从旧数据库移动到新数据库(不同的架构)。我正在使用Visual Studio 2013C#Entity Framework 5Microsoft 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


【解决方案1】:

我认为这与 DbContext 的发展有关。

您可以利用以下帖子:

例如,基本上您必须按 100 行的部分插入,并重置(再次设置,即:_context = new SomeContext();)每次插入之间的上下文。

【讨论】:

  • 感谢您的有用评论。我会试试:)
猜你喜欢
  • 1970-01-01
  • 2015-07-09
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
  • 2010-12-18
  • 2011-01-12
相关资源
最近更新 更多