Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查询列表是否更快<;T>;还是数据库?_C#_Asp.net_Database_Performance_Linq - Fatal编程技术网

C# 查询列表是否更快<;T>;还是数据库?

C# 查询列表是否更快<;T>;还是数据库?,c#,asp.net,database,performance,linq,C#,Asp.net,Database,Performance,Linq,我最近遇到过几种情况,需要从同一个表中获取不同的数据。一个例子是,我将循环遍历每个“交付驱动程序”,并为每个要交付给的客户生成一个可打印的PDF文件 在这种情况下,我将所有客户拉入并存储到 List<Customer> AllCustomersList = customers.GetAllCustomers(); List allCustomerList=customers.GetAllCustomers(); 当我在传送驱动程序中循环时,我会这样做: List<Custo

我最近遇到过几种情况,需要从同一个表中获取不同的数据。一个例子是,我将循环遍历每个“交付驱动程序”,并为每个要交付给的客户生成一个可打印的PDF文件

在这种情况下,我将所有客户拉入并存储到

List<Customer> AllCustomersList = customers.GetAllCustomers();
List allCustomerList=customers.GetAllCustomers();
当我在传送驱动程序中循环时,我会这样做:

List<Customer> DeliveryCustomers = AllCustomersList.Where(a => a.DeliveryDriverID == DriverID);
List DeliveryCustomers=AllCustomersList.Where(a=>a.DeliveryDriverID==DriverID);

我的问题是:我通过查询列表对象的方式是否比每次查询数据库中与交付驱动程序关联的客户记录的速度更快?

没有准确的行数,如果传递它,则应该在内存中查询数据库
List

但经验法则是,DB设计用于处理大量数据,它们有优化“机制”,而在内存中没有这样的东西

因此,您需要对其进行基准测试,以查看每次对您重要的行数是否值得往返到DB

“我们应该忘记小效率,比如说97%的时间:为时过早
优化是万恶之源

避免往返数据库是有关数据库性能调整的主要规则之一,特别是当数据库位于网络上且有多个用户访问它时

从另一个角度来看,像客户一样将大型结果集放入内存,数据看起来效率不高,而且可能不会比需要时转移到DB更快


为了避免往返,最好使用内存中的集合用于查找表(即客户类别、客户区域等),这些表不会经常更改。这样,您就可以避免在主客户选择查询中加入,从而使查询速度更快。

为什么不使用,这是一个内存中的数据库,速度非常快。

我无法想象从数据库中提取数据会比在内存中像现在这样做更好。。。我能想到的唯一一件事是确保你不会在使用时提取更多的数据……查询列表应该快得多,因为它会存储在内存中。在什么时候,数据会变得太多而无法放入列表,需要使用数据库?@xbonez。那不是真的。DB是为过滤而构建的,对于大量数据,您使用DB,而不是在内存中。@xbonez-虽然您适合较小的数据集,但对于非常大的数据集(可能是10或100的数千,可能是数百万,可能更多),DB的效率会更高,这主要是由于索引和内存中数据集的组织。当然,如果数据库可以将整个数据集保存在内存中,那么它将比磁盘上的效率更高。