我在使用 SharpRepository 时遇到了一些性能问题,在玩了 SQL Query Profiler 之后,我找到了原因。
使用 EF,我可以做这样的事情:
var books = db.Books.Where(item => item.Year == '2016');
if (!string.IsNullorEmpty(search_author))
books = books.Where(item => item.Author.Contains(search_author);
return (books.ToList());
在使用书籍(最后一行)之前,EF 不会真正做任何事情,然后它将编译一个查询,该查询将仅从数据库中选择与年份和作者匹配的一小组数据。
但是 SharpRepository 会立即评估书籍,所以:
var books = book_repo.Books.FindAll(item => item.Year == '2016');
if (!string.IsNullorEmpty(search_author))
books = books.Where(item => item.Author.Contains(search_author);
return (books.ToList());
将在第一行编译一个查询,如“select * from Books where Year == '2016'”,并从数据库中获取所有这些记录!然后在第二行,它将在 C# 代码中搜索作者......当使用大型数据库时,这种行为可能是性能上的主要差异,它解释了为什么我的查询超时......
我尝试使用 repo.GetAll().Where() 而不是 repo.FindAll().... 但它的工作方式相同。
我在这里误解了什么,有没有办法解决这个问题?