【发布时间】:2023-03-23 18:58:01
【问题描述】:
我有这个question,我为此提供了一个解决方案。但是,我觉得这并没有达到应有的效率:
using (DataContext context = new DataContext(SqlConnection)
{
var custInfo = context.GetTable<tbl_CustomerInfo>();
string compID = ImportCust.Rows[0]["CompanyID"].ToString();
var imports = from cust in ImportCust.AsEnumerable()
select cust.Field<int>("CustomerID");
var dupes = from import in imports
join cust in custInfo
on import equals cust.CustomerID
where cust.CompanyID== pivnum
select cust;
var records = dupes.GetEnumerator();
while (records.MoveNext())
{ custInfo.DeleteOnSubmit(records.Current); }
context.SubmitChanges();
}
我使用Stopwatch 来查看从records 到完成SubmitChanges 所经过的时间跨度迭代。流逝的时间似乎没有韵律或理由:
10666 条记录在 20 秒内完成
12 秒内完成 15425 条记录
21 秒内完成 289 条记录
显然,可以加快速度的一件事是如果我要删除索引。可以以编程方式完成吗?另外,有没有比我提供的更好的方法?
【问题讨论】:
-
老实说,寻找骗子最有效的地方是在野兽的肚子里(在数据库 - 存储过程中)。如果您的 UI/演示文稿的某些要求是“显示重复项”,我会感到惊讶。我猜这是维护?
-
这两组记录是否都已存储在数据库中,还是 ImportCust 记录仅在内存中?
-
@Chris:ImportCust 是一个内存数据表。但现在这种情况正在改变。我会将 ImportCust 推送到 SqlServer 中的临时表并为此工作运行 SP。
-
@dboarman:这绝对是处理这个问题的最佳方式。
-
@Chris:我完全同意,在我的经理看到这项工作比阿拉斯加的糖蜜要慢后,他改变了将工作放在哪里的想法。虽然我可以对 codez 进行改进,但工作效率可能是最小的收益。就像 RPM1984 所说的,把这项工作放在野兽的肚子里。
标签: c# linq-to-sql .net-3.5 linq-to-objects