LINQ中哪种方法更好?

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

Com*_*eak 5

这要视情况而定。通常,我更喜欢方法1,因为您通常无法预测数据库中有多少用户,并且会将所有用户拉到内存中,这将导致很大的内存开销。对于大量用户,您还将利用索引和查询执行计划之类的数据库优化功能。

如果我们谈论的是少量用户,则方法2可能会更有效,因为您减少了到数据库的往返次数。但是,除了内存开销之外,它还存在其他问题,例如缓存用户和丢失数据库更新。

但是,我几乎总是喜欢方法1,因为对数据库进行大多数的筛选和排序工作是一种很好的做法,因为它已针对此类事情进行了优化。使用方法2时,随着用户群的增长,您可能会遇到麻烦,并且很难跟踪缓存或内存问题。而且,如果您没有真正不良的连接或多次连接,则一次和两次数据库往返之间的差异几乎可以忽略不计。

  • 在99.999%的情况下,应使用方法1 @SudhirDehade。如果方法1较慢,则请考虑方法2。但是请始终从方法1开始**。在您的阶段,我建议始终使用方法1,而不必担心它。 (3认同)