gpt4 book ai didi

.net - 使用 SQL Server CE 4.0 和 Entity Framework 4.2 进行批量插入的性能非常差

转载 作者:行者123 更新时间:2023-12-01 19:24:00 25 4
gpt4 key购买 nike

我使用 Entity Framework 4.2(代码优先)将大量数据插入 SQL Server CE 4.0,与直接 SQL 插入相比,性能非常糟糕。

模型非常简单:

public class DocMember
{
public DocMember() { this.Items = new List<DocItem>(); }

public int Id { get; set; }

public string Name { get; set; }
public string MemberType { get; set; }
public string AssemblyName { get; set; }

public virtual IList<DocItem> Items { get; set; }
}

public class DocItem
{
public int Id { get; set; }
public DocMember Member { get; set; }
public string PartType { get; set; }
public string PartName { get; set; }
public string Text { get; set; }
}

我有 2623 个 DocMembers 和总共 7747 个 DocItems 需要插入,我得到的执行时间如下:

With SQL: 00:00:02.8
With EF: 00:03:02.2

我可以理解 EF 会产生一些开销,但它比 SQL 慢65 倍!

也许我的代码有问题,但它非常简单,我看不出可能有什么问题:

    private TimeSpan ImportMembersEF(IList<DocMember> members)
{
using (var db = new DocEntities())
{
db.Database.CreateIfNotExists();

var sw = Stopwatch.StartNew();
foreach (var m in members)
{
db.Members.Add(m);
}

db.SaveChanges();
sw.Stop();
return sw.Elapsed;
}
}

我还尝试为每个插入的项目或每 100 个或 200 个项目调用 SaveChanges,但无济于事(实际上这使情况变得更糟)。

有没有办法提高性能,还是必须使用SQL进行批量插入?

<小时/>

编辑:为了完整起见,这里是 SQL 插入的代码:http://pastebin.com/aeaC1KcB

最佳答案

您可以使用我的 SqlCeBulkCopy 库来加载批量数据,它模仿 SqlBulkCopy api:http://sqlcebulkcopy.codeplex.com

关于.net - 使用 SQL Server CE 4.0 和 Entity Framework 4.2 进行批量插入的性能非常差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8980179/

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