Tho*_*que 8 .net performance entity-framework sql-server-ce-4
我使用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; }
}
Run Code Online (Sandbox Code Playgroud)
我有2623 DocMembers和总共7747 DocItems要插入,我得到以下执行时间:
With SQL: 00:00:02.8
With EF: 00:03:02.2
Run Code Online (Sandbox Code Playgroud)
我可以理解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;
}
}
Run Code Online (Sandbox Code Playgroud)
我也尝试呼叫SaveChanges每个插入的项目,或每100或200项,无济于事(它实际上使情况更糟).
有没有办法提高性能,还是我必须使用SQL进行批量插入?
编辑:为了完整性,这里是SQL插入的代码:http://pastebin.com/aeaC1KcB
| 归档时间: |
|
| 查看次数: |
2044 次 |
| 最近记录: |