0
我想創建一個函數,根據從數據庫中讀取的一系列bool值來修改查找。很差的性能修改查找
我試圖採取的做法是這樣的:
IEnumerable<RootDomain> lookup = db.RootDomains;
//bools are nullable
if (conditions.HasCompanyMatch == true) lookup = lookup.Where(x => x.Companies.Any(c => c.CompanyMatches.Count > 1));
if (conditions.HasCompanyMatch == false) lookup = lookup.Where(x => !x.Companies.Any(c => c.CompanyMatches.Count > 1));
if (conditions.HasEmail == true) lookup = lookup.Where(x => x.EmailMessages.Count() > 1);
// etc.. more bool switches
//very slow when it enumerated in any way
var count = lookup.Count();
它的工作原理,但它是極其緩慢。當列舉的枚舉查找時,內存使用跳轉到800mb左右,並且需要幾分鐘時間,而如果我一步完成所有操作,只需幾秒鐘,內存就像60mb。
我假設這樣做是添加一些遞歸查詢或其他東西,但我不知道。
在不破壞性能的情況下達成此目標的正確方法是什麼?
「而如果我做的這一切在一個步驟需要只需幾秒鐘「 - 你可以顯示你使用的代碼嗎? –
我的意思是像'lookup = db.RoodDomains.Where(...).Where(...).Where(...)'在一個沒有任何if語句的情況下執行它。 – Guerrilla
假設這是SQL服務器,是否使用概要分析工具調查了生成的SQL? –