如何改进这个嵌套循环?

时间:2014-08-14 20:56:10

标签: c# .net linq entity-framework

我正在尝试使用.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
    { 

基本上,我将两个表中的记录与复杂的逻辑进行比较。 如何大大提高代码的性能? 谢谢

1 个答案:

答案 0 :(得分:5)

这一行:

var ffaccounts = ffsf.Accounts;

是什么打击了你。您基本上将IQueryable分配给一个变量,当您在内部循环中访问该变量时,每次都会重新查询数据库。我想只需在最后添加ToList()即可大幅提升您的效果:

var ffaccounts = ffsf.Accounts.ToList();

当然,假设将6000行实现到内存中是可以接受的。

如果没有,那么您可能要考虑在SQL中编写逻辑并在DB中完成所有工作......