c# - LINQ 中哪种方法更好?

标签 c# database performance linq

我在 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();                   
        }
       
    }

方法 2

 public class UserDetails
    {
       List<Defect> allUser = new db.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();                   
        }
       
    }

有超过20个方法在获取数据,每个方法都是从同一个表中获取不同where条件的数据。 我的问题是我应该创建 dbContext 然后在每个方法中使用单独的查询 (Approch 1) 或者我应该创建一个列表并获取所有数据并在方法本身中使用过滤它哪里条件。 (方法 2)

最佳答案

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

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

但是,我几乎总是更喜欢方法 1,因为在数据库上进行大部分过滤和排序工作是一种很好的做法,因为它已针对执行此类操作进行了优化。使用方法 2 您可能会遇到麻烦,因为您的用户群会随着时间的推移而增长,并且很难追踪缓存或内存问题。此外,如果您的连接不是非常糟糕或多次连接,一次和两次数据库往返之间的差异几乎可以忽略不计。

关于c# - LINQ 中哪种方法更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56771421/

相关文章:

c++ - C++中深层继承树的性能影响

sql - 在 SQL Server 2005/2008 中存储历史数据的最佳方式是什么?

c# - 通过搜索过滤器(如日期)读取 Google 邮箱

c# - Linq 左连接将数据添加到左对象

mysql - 无法提供代码来回答此查询。

php - 显示某些 MySQL 表

c# - 将现有的 MySql 数据库记录传输到 SqLite

c# - catch 的 () 中包含什么?

ruby-on-rails - 删除一些以前的数据后,如何在 PostgreSQL 中重新启动对表的 id 计数?

android - Flutter:我怎样才能提高该应用程序的性能?