C# 使用linq在inmemory对象上执行连接要比在sql中插入它们然后编写查询慢得多
我正在优化生成报告的模块。输入是7个csv文件。目前,该程序首先截断相应的表,然后进行大容量插入,最后执行一个sql查询,该查询为我们提供所需的数据。这个节目属于前林克时代 现在,由于不需要在sql server中存储数据,我正在读取csv文件并创建匿名列表,然后编写连接逻辑并查询结果。让我感到奇怪的是,这种方法比以前的方法慢20倍!即使没有插入数据的开销 在sql中,我们确实定义了索引和键,所以我认为sql性能会更好,但是我不知道Linq做了什么?linq中是否有类似功能的选项?有人能给我一些见解吗?我是否应该回到以前的方法,首先将其存储在sql中,然后使用sql获取报告? 谢谢是预付款 这是一个包含两个连接的示例,它占用了最多的时间,我删除了许多列C# 使用linq在inmemory对象上执行连接要比在sql中插入它们然后编写查询慢得多,c#,sql,asp.net,linq,C#,Sql,Asp.net,Linq,我正在优化生成报告的模块。输入是7个csv文件。目前,该程序首先截断相应的表,然后进行大容量插入,最后执行一个sql查询,该查询为我们提供所需的数据。这个节目属于前林克时代 现在,由于不需要在sql server中存储数据,我正在读取csv文件并创建匿名列表,然后编写连接逻辑并查询结果。让我感到奇怪的是,这种方法比以前的方法慢20倍!即使没有插入数据的开销 在sql中,我们确实定义了索引和键,所以我认为sql性能会更好,但是我不知道Linq做了什么?linq中是否有类似功能的选项?有人能给我一些
var fileinfo = File.ReadAllLines(HttpContext.Current.Server.MapPath("/massupload/productimages.txt"));
var fileinfo1 = File.ReadAllLines(HttpContext.Current.Server.MapPath("/massupload/productimages.txt"));
var Items = (from line in fileinfo
let row = line.Split(',')
select new
{
SKU = row[0].Trim(),
SupplierId = Convert.ToInt32(row[1].Trim()),
SupplierItemNo = row[2].Trim()
}).ToList();
var oits = (from line in fileinfo1
let row = line.Split(',')
select new
{
Custid=int.Parse(row[0].Trim()),
SKU = row[01].Trim()
}).ToList();
var firstjoin = (from i in Items
join o in oits on i.SKU equals o.SKU
select new
{
o.Custid,
o.SKU,
i.SupplierId,
i.SupplierItemNo
}).ToList();
可能是因为您的匿名对象没有将关系属性存储在哈希表中,因此连接成为跨“表”的搜索,以查找适当的行。不,它没有。你能指导我如何在网上做这个/任何教程吗?如果你用内存中的SqlLite数据库替换你的(物理的?)数据库怎么办?这样,您就不必更改任何业务逻辑,同时或多或少地保留了关系数据的性能。它不应该变慢。关键点是什么是“连接逻辑”,以及如何“查询结果”。在LINQ to对象中,查询的结构非常重要,因为它控制执行计划(不像现在的数据库SQL查询)。使用
ToList()
具体化项和oits
集合有什么原因吗?