2014-08-14 6 views
-1

Я пытаюсь выполнить нечеткое совпадение записей в двух таблицах счетов, используя .NET Entity Framework. Я написал такой код, но у него плохая производительность, как за 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

Как сложны мы говорим? –

+3

Не видя «сложной логики», трудно дать какие-либо советы. –

+0

Профилировали ли вы код, чтобы найти узкие места? – Sean

ответ

5

Эта строка:

var ffaccounts = ffsf.Accounts; 

является то, что бил вас трудно. Вы в основном назначаете IQueryable переменной, которая при обращении во внутреннем цикле повторно запрашивает базу данных каждый раз. Я представляю себе, просто добавив ToList() на конце будет существенно улучшить производительность:

var ffaccounts = ffsf.Accounts.ToList(); 

Это предполагает, что, конечно, что это приемлемо для материализовать 6000 строк в памяти.

Если нет, то вы можете рассмотреть вопрос о написании логики в SQL и делать всю работу в БД вместо ...

+0

Я пробовал это сначала, но он не в памяти. Если я просто запрашиваю часть таблицы, а не все столбцы, но такое же количество строк, можно ли это преодолеть? – Singed

+0

Нужно ли вообще вносить изменения в 6000 объектов? Если нет, то загрузите их 'AsNoTracking()'. Это должно несколько уменьшить объем памяти. –

+0

Нет, мне не нужно вносить изменения в одну из двух таблиц. Я просто хочу найти совпадающие записи и вставить идентификаторы из них в другую таблицу – Singed

Смежные вопросы