Tim*_*ter 2 .net linq vb.net performance
在为SO答案生成样本数据时,我想到了这个问题.我不喜欢逐个添加DataRows的冗长方式Tbl.Rows.Add,所以我创建了这个伪LINQ查询,除了隐含地添加行之外什么都不做:
Private Function GetData() As DataTable
Dim years = {"2010/2009", "2009/2008", "2008/2007", "2007/2006", "2006/2005", "2005/2004", "2004/2003"}
Dim tbl = New DataTable
tbl.Columns.Add(New DataColumn("Year"))
' adds DataRows to the DataTable, need Count to execute the query '
Dim c = (From y In years Select tbl.Rows.Add(y)).Count
Return tbl
End Function
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我根本不需要查询的结果,它的唯一目的是迭代和调用DataTable.Rows.Add.因此,结果已在DataTable本身中可用,而不需要查询.
不可否认,这个问题有点不合理,因为使用fe ToList并没有太大的区别,通常查询的目的是返回一些东西.
但无论如何,当只执行而不是结果重要时,执行LINQ查询的最便宜的方式(就内存消耗,执行时间而言)是什么?
编辑:好的,这个问题是快速拍摄和鸡蛋问题.我想将20行代码减少到一行,但注意到我需要某种类型的DataSource用于LINQ-Query.因此我创建了阵列.但是在这一点上我可以简单地使用for-each循环来添加DataRows.
结论:使用LINQ-Query来获取它的用途:查询.然后这个问题毫无意义,因为没有最便宜的方式,只有返回正确结果的方法.
我只是将其重写为foreach:
For Each y As String in years
tbl.Rows.Add(y)
Next
Run Code Online (Sandbox Code Playgroud)
用这种方式表达你的意图要清楚得多,而且它会马上执行.