Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
Vb.net 我能从这个linq查询中获得更好的性能吗?_Vb.net_Linq - Fatal编程技术网

Vb.net 我能从这个linq查询中获得更好的性能吗?

Vb.net 我能从这个linq查询中获得更好的性能吗?,vb.net,linq,Vb.net,Linq,我有一个表单,当我加载时,我会填充未结发票(85000多条记录)。用户可以选择“已关闭”发票,我将我的Daysald组合框默认为60。(这允许我执行后台任务,检索过去60天内的所有已关闭发票(100000多条记录)。然后用户可以从下拉列表中选择60、120、360、540、720。如果用户选择720,我将重新运行查询并返回过去720天内的所有已关闭发票。)(320万条记录)。但是,如果用户选择了其中一个较高的天数,然后重新选择一个较小的天数(例如60天),我不想重新运行查询,我想从已有的记录集中

我有一个表单,当我加载时,我会填充未结发票(85000多条记录)。用户可以选择“已关闭”发票,我将我的Daysald组合框默认为60。(这允许我执行后台任务,检索过去60天内的所有已关闭发票(100000多条记录)。然后用户可以从下拉列表中选择
60、120、360、540、720
。如果用户选择
720
,我将重新运行查询并返回过去720天内的所有已关闭发票。)(320万条记录)。但是,如果用户选择了其中一个较高的天数,然后重新选择一个较小的天数(例如60天),我不想重新运行查询,我想从已有的记录集中提取所需的数据

\u taClosed
是我根据所选天数返回的(对象)列表

Dim tot = (From tak In _taClosed
          Where tak.DateOfInvoice > DateTime.Now.AddDays(-1 * cmbDaysOld.SelectedItem)).CopyToDataTable()

请注意,运行linq查询需要5秒钟,这似乎是一段很长的时间。非常感谢您对提高性能的任何建议。

我唯一看到的是
DateTime.Now.AddDays()
在lambda表达式中调用。在输入查询之前,您应该只计算一次:

Dim dateFrom = DateTime.Now.AddDays(-1 * cmbDaysOld.SelectedItem)
Dim tot = (From tak In _taClosed
          Where tak.DateOfInvoice > dateFrom).CopyToDataTable()
但我认为这不会有多大区别

有很多记录,您应该考虑使用数据库,而不是内存中的集合。


另外,是否一次显示所有项目?如果只显示多个记录(因为分页),则检索所有记录没有意义。

我看到的唯一内容是
DateTime.Now.AddDays()
在lambda表达式中调用。在输入查询之前,只应计算一次:

Dim dateFrom = DateTime.Now.AddDays(-1 * cmbDaysOld.SelectedItem)
Dim tot = (From tak In _taClosed
          Where tak.DateOfInvoice > dateFrom).CopyToDataTable()
但我认为这不会有多大区别

有很多记录,您应该考虑使用数据库,而不是内存中的集合。


另外,是否一次显示所有项目?如果只显示几个记录(因为分页),则检索所有记录没有意义。

对于320万条记录,我怀疑原始数据存储将更快地搜索内存中的linq查询

我想问的是,为什么您首先要将这么多原始数据加载到一个视图中。没有一种实用的方法可以让用户读取这么多数据


您的查询可能更适合于加载数据的聚合视图并将其呈现给用户。

对于320万条记录,我怀疑原始数据存储将更快地搜索内存中的linq查询

我想问的是,为什么您首先要将这么多原始数据加载到一个视图中。没有一种实用的方法可以让用户读取这么多数据



您的查询最好是加载数据的聚合视图并将其呈现给用户。

所需的时间与LINQ和所有数据量的关系不大。查询本身需要5秒还是包括其他操作(即CopyToDataTable)?索引的状态是什么?@TMcKeown我想这可能是我正在查看的数据量,但我不确定linq是否以最有效的方式正确设置。@SimonBelanger使用copyToDatatable运行需要5秒。查询只进行一次日期比较,这是数据量。它花费的时间是es与LINQ和数据量的关系不大。查询本身需要5秒还是包括其他操作(即CopyToDataTable)?索引的状态是什么?@TMcKeown我想这可能是我正在查看的数据量,但我不确定linq是否以最有效的方式正确设置。@SimonBelanger使用copyToDatatable运行需要5秒钟。查询只进行一次日期比较,这是数据量。我实际上看到了吗?这种修改在linq查询中产生了很大的不同(如果可以提前完成,则将工作移出lambda).这就是说,我在lambda中所做的工作是字符串操作,这可能比修改日期时间更为激烈。这将产生影响,但我不确定它会有多大。这确实产生了巨大的影响,而不是linq需要5秒,它需要1秒。谢谢。我确实看到这种修改产生了巨大的影响linq查询中的巨大差异(如果可以提前完成,则将工作移出lambda).这就是说,我在lambda中所做的工作是字符串操作,这可能比修改日期时间更为激烈。这将产生影响,但我不确定它会有多大。这确实产生了巨大的影响,而不是linq需要5秒,需要1秒。谢谢。我的ultrawingrid上有一个过滤器行,我允许他要求用户过滤数据。我本人和我的经理认为我们返回的数据太多了,但我们的用户坚持他们需要这些数据。我们最初有60天的数据,但我们的用户需要的信息没有显示出来,所以我们给了他们这个选项。我已经实施了另一个建议,并且有了显著的改进性能。感谢您的建议。我的ultrawingrid上有一个过滤器行,允许用户过滤数据。我本人和我的经理认为我们返回的数据太多,但我们的用户坚持他们需要这些数据。我们最初有60天的数据,但有一些信息没有显示出来,这是我们的用户需要的,所以我们给了他们这个选项。我已经实施了另一个建议,它大大提高了性能。谢谢你的建议。