我正在尝试使用.NET Entity Framework对两个Account表中的记录进行模糊匹配。 我写了一些像这样的代码,但它的性能不好,比如1分钟的记录。
ARSalesforceEntities arsf = new ARSalesforceEntities(); //dbcontext
Salesforce_FFEntities ffsf = new Salesforce_FFEntities(); //dbcontext
var araccounts = arsf.Accounts; //dbset contains 400000 records
var ffaccounts = ffsf.Accounts; //dbset contains 6000 records
IDCONV byName = new IDCONV();
IDCONV byAddress = new IDCONV();
foreach (var ffaccount in ffaccounts)
{
Console.WriteLine(++count);
foreach (var araccount in araccounts)//this line goes every slow like 1 min
{
基本上,我将两个表中的记录与复杂的逻辑进行比较。 如何大大提高代码的性能? 谢谢
答案 0 :(得分:5)
这一行:
var ffaccounts = ffsf.Accounts;
是什么打击了你。您基本上将IQueryable
分配给一个变量,当您在内部循环中访问该变量时,每次都会重新查询数据库。我想只需在最后添加ToList()
即可大幅提升您的效果:
var ffaccounts = ffsf.Accounts.ToList();
当然,假设将6000行实现到内存中是可以接受的。
如果没有,那么您可能要考虑在SQL中编写逻辑并在DB中完成所有工作......