gpt4 book ai didi

c# - Entity Framework 保存时间长

转载 作者:行者123 更新时间:2023-11-30 15:28:39 24 4
gpt4 key购买 nike

这里有很多关于 EF 的文章需要很长时间才能保存,但我已经浏览了它们并使用了他们的答案,但似乎仍然得到非常缓慢的结果。

我的代码是这样的:

using (MarketingEntities1 db = new MarketingEntities1())
{
//using (var trans = db.Database.BeginTransaction(IsolationLevel.ReadUncommitted))
//{
int count = 0;
db.Configuration.AutoDetectChangesEnabled = false;
db.Configuration.ValidateOnSaveEnabled = false;
while (count < ranges.Count)
{
if (bgw != null)
{
bgw.ReportProgress(0, "Saving count: " + count.ToString());
}
db.Set<xGeoIPRanx>().AddRange(ranges.Skip(count).Take(BATCHCOUNT));
db.SaveChanges();
count+=BATCHCOUNT;

}
//trans.Commit();
//}
}

每批需要 30 多秒才能完成。 BatchCount 是 1000。我知道 EF 没那么慢。你可以看到我已经停止使用交易,我已经取消了跟踪,这些似乎都没有帮助。

更多信息:

xGeoIpRanx 是一个空表,没有 PK(我不确定它会有多大帮助)。我正在尝试插入大约 1000 万个范围。

编辑:

我觉得自己很愚蠢,但我正在尝试使用 bulkInsert,但我一直收到此实体不存在的错误,我查看了这段代码

using (var ctx = GetContext())
{
using (var transactionScope = new TransactionScope())
{
// some stuff in dbcontext

ctx.BulkInsert(entities);

ctx.SaveChanges();
transactionScope.Complete();
}
}

什么是“实体”我尝试了我的实体列表,但不起作用,那是什么数据类型?

nvm 它按预期工作这是一个奇怪的错误,因为我如何生成 edmx 文件

最佳答案

Pause the debugger 10 times under load and look at the stack including external code. Where does it stop most often?

.

Its taking a long time on the .SaveChanges(). just from some quick tests, ADO.net code

这意味着网络延迟和服务器执行时间是造成这种情况的原因。对于插入服务器执行时间通常不会那么长。您无法使用 EF 对网络延迟做任何事情,因为它每次插入都会发送一个批处理。 (是的,这是框架的缺陷。)。

不要将 EF 用于批量工作。考虑使用表值参数或 SqlBulkCopy 或任何其他批量插入方式,例如 Aducci's proposal来自评论。

关于c# - Entity Framework 保存时间长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25291265/

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