gpt4 book ai didi

c# - (DbContext) SaveChanges() 如何用于大量记录? - 寻求和找到最佳性能的解决方案

转载 作者:行者123 更新时间:2023-11-30 16:39:09 25 4
gpt4 key购买 nike

它可以为大量记录运行 SaveChanges(),但性能 Not Acceptable 。

这是一个例子两个表:

[联系人](身份证、姓名、邮政编码、城市、状态)

[zip_city](身份证、 zip 、城市)

需要更新表 contact 中所有列 zip 的状态,城市在表 zip_city 中可用

当记录数小于10,000时,性能可以接受。

但是对于 +10,000 条记录,Visual Studio(调试器)提示它花费的时间太长:CLR 无法在 60 秒内从 COM 上下文 0xb67898 转换到 COM 上下文 0xb67728.... 在构建查询“qry”时

var ctx = new DbContext();

var qry = ctx.contact.Join(ctx.zip_city, c => new { c.zip, c.city }, z => new { z.zip, z.city }, (c, z) => new { c, z })
.Select(x => new dtoContact { id = x.c.id }).ToList();

foreach (var con in ctx.contact)
{
if (qry.Any(x => x.Id == con.id))
{
con.status = "P/O";
}
else
{
con.status = "???";
}
}

ctx.SaveChanges();

使用以下代码,它通过运行 ctx.SaveChanges() 引发相同的消息;

var ctx = new DbContext();

var zc = ctx.zip_city.ToList();

foreach (var con in ctx.contact)
{
if (zc.Any(x => x.zip == con.zip && x.city == con.city))
{
con.status = "P/O";
}
else
{
con.status = "???";
}
}

ctx.SaveChanges();

引用:数据传输对象

public class dtoContact 
{
public int id { get; set; }
public string name { get; set; }
public string zip { get; set; }
public string city { get; set; }
public string status { get; set; }
}

信息:Visual Studio(调试器)消息!google 翻译自 VS15 德文版

托管调试助手“ContextSwitchDeadlock”在“C:\Projects\Sweepstakes_EF6\TrafficSightAct\bin\Debug\Sweepstakes.exe”中遇到问题。附加信息:CLR 在 60 秒内无法从 COM 上下文 0xb67898 转换到 COM 上下文 0xb67728。拥有目标上下文/单元的线程要么等待而不移动消息,要么处理一个非常持久的操作而不移动 Windows 消息。这种情况通常会降低性能,甚至可能导致应用程序停止响应或增加内存使用量。

最佳答案

在这种情况下,我想推荐使用 SqlCommand。

例如:

var ctx = new DbContext();

string sql = "update contact c inner join zip_city z " +
"on c.plz = z.plz and c.ort = z.ort set c.status = 'P/O'; ";
sql = sql + "update contact set status = '???' where status <> 'P/O'; ";

ctx.Database.ExecuteSqlCommand(sql);

我认为,您的 27,000 条记录可能只需要几秒钟。

请尝试。

关于c# - (DbContext) SaveChanges() 如何用于大量记录? - 寻求和找到最佳性能的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53519799/

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