gpt4 book ai didi

c# - 使用 Entity Framework 4 将大量行插入到 SQL CE 4.0(性能问题)

转载 作者:太空狗 更新时间:2023-10-29 18:13:49 25 4
gpt4 key购买 nike

我有一个带有多个表的小型 SQL CE 4.0 数据库,使用 Entity Framework 4 进行映射。

这是我的代码

foreach (String designation in newItemDesignations)
{
ParameterData defaultValue = PDM.GetDefaultParameterData(designation);

// Fill the ItemParameterDBO object with the data
ItemParameterDBO dbParam = new ItemParameterDBO();
dbParam.ItemID = dbItem.ID;
dbParam.Designation = designation;
dbParam.High = defaultValue.High;
dbParam.Low = defaultValue.Low;

database.ItemParameterDBOes.AddObject(dbParam);
}

database.SaveChanges();

此代码发生 24 次,每次 newItemDesignations 列表包含恰好 525 个元素。总共要添加 12600 行。

整个过程持续 509 秒。我想这对于 12600 行来说太多了。

我知道我正在调用 SaveChanges 24 次。目前,应用程序设计不允许我将所有插入放入单个事务中(使用 SaveChanges)。但是,看看单个事务会发生什么。 509/24 = 21 秒,或 每行 40 毫秒

  • 通过 EF4 插入一行的正常(平均)时间是 40 毫秒吗?

我检查了我的其他代码(除了添加到数据库和保存更改)。所有 12600 行总共需要 100 毫秒。那是完成时间的 0.01%,所以这显然不是问题所在。 99.99% 的处理时间花在了 EF4 AddObjectSaveChanges 上。

我也知道我正在设置 ItemID 属性,它是一个外键。这是一个整数,所以我想应该没什么大不了的。但我不知道。

另请注意:没有在任何表上设置索引(主键/外键除外)

  • 我做错了什么,为什么这么慢?
  • 这是插入那么多行所需的正常时间,还是与 SQL CE 4 相关的某种性能限制?

最佳答案

由于示例很少,这里是我测试过的代码,它运行完美。感谢 ErikEJ 的 SqlCeBulkCopy 库。必备品。

DataTable table = new DataTable();

table.Columns.Add(new DataColumn("A", typeof(int)));
table.Columns.Add(new DataColumn("B", typeof(String)));
table.Columns.Add(new DataColumn("C", typeof(Byte)));

for(int i = 0; i < 12000; i++)
{
DataRow row = table.NewRow();
row["A"] = "124324"
row["B"] = "something";
row["C"] = 15;

table.Rows.Add(row);
}

String connString = @"Data Source = C:\Database.sdf";
SqlCeBulkCopy bulkInsert = new SqlCeBulkCopy(connString);
bulkInsert.DestinationTableName = "Items";
bulkInsert.WriteToServer(table);

插入我的 (OP) 12600 行用了不到 2 秒。

这个例子很糟糕,它不是强类型的,但它描述了如何使用 SqlCeBulkCopy 库手动创建数据表并将其插入数据库(请参阅 accepted answer 获取链接)。

关于c# - 使用 Entity Framework 4 将大量行插入到 SQL CE 4.0(性能问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7027711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com