Sud*_*ade 3 c# linq database performance
我在C#中使用linq,我有一个快速的问题。
我在这里展示了非常少量的代码,实时地还有一些排序操作。我想从下面知道我应该使用哪种方法?
方法1
public class UserDetails
{
private dbContext db = new dbContext();
public List<User> ActiveUser()
{
return db.Users.Where(m => m.Active == true).ToList();
}
public List<User> InActiveUser()
{
return db.Users.Where(m => m.Active == false).ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
方法2
public class UserDetails
{
List<Defect> allUser = new dbContext().Users.ToList();
public List<User> ActiveUser()
{
return allUser.Where(m => m.Active == true).ToList();
}
public List<User> InActiveUser()
{
return allUser.Where(m => m.Active == false).ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
有20多种方法正在获取数据,每种方法都是从具有不同where条件的同一张表中获取数据。我的问题是应该创建dbContext,然后在每个方法中使用单独的查询(方法1),还是应该创建一个List并获取所有数据,并使用where条件在方法本身中对其进行过滤。(方法2)
这要视情况而定。通常,我更喜欢方法1,因为您通常无法预测数据库中有多少用户,并且会将所有用户拉到内存中,这将导致很大的内存开销。对于大量用户,您还将利用索引和查询执行计划之类的数据库优化功能。
如果我们谈论的是少量用户,则方法2可能会更有效,因为您减少了到数据库的往返次数。但是,除了内存开销之外,它还存在其他问题,例如缓存用户和丢失数据库更新。
但是,我几乎总是喜欢方法1,因为对数据库进行大多数的筛选和排序工作是一种很好的做法,因为它已针对此类事情进行了优化。使用方法2时,随着用户群的增长,您可能会遇到麻烦,并且很难跟踪缓存或内存问题。而且,如果您没有真正不良的连接或多次连接,则一次和两次数据库往返之间的差异几乎可以忽略不计。