Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.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# 使用linq在inmemory对象上执行连接要比在sql中插入它们然后编写查询慢得多_C#_Sql_Asp.net_Linq - Fatal编程技术网

C# 使用linq在inmemory对象上执行连接要比在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中是否有类似功能的选项?有人能给我一些

我正在优化生成报告的模块。输入是7个csv文件。目前,该程序首先截断相应的表,然后进行大容量插入,最后执行一个sql查询,该查询为我们提供所需的数据。这个节目属于前林克时代

现在,由于不需要在sql server中存储数据,我正在读取csv文件并创建匿名列表,然后编写连接逻辑并查询结果。让我感到奇怪的是,这种方法比以前的方法慢20倍!即使没有插入数据的开销

在sql中,我们确实定义了索引和键,所以我认为sql性能会更好,但是我不知道Linq做了什么?linq中是否有类似功能的选项?有人能给我一些见解吗?我是否应该回到以前的方法,首先将其存储在sql中,然后使用sql获取报告? 谢谢是预付款

这是一个包含两个连接的示例,它占用了最多的时间,我删除了许多列

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
集合有什么原因吗?