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
Xml 如何加速此Linq select代码?_Xml_Linq_Select_Sql Order By_Where - Fatal编程技术网

Xml 如何加速此Linq select代码?

Xml 如何加速此Linq select代码?,xml,linq,select,sql-order-by,where,Xml,Linq,Select,Sql Order By,Where,我有一个xml文件,每个项目包含3条数据:productName、productCode和productPrice。xml文件中的项目数约为7000个 用户可以通过在文本框中键入“red shirt”等方式按名称搜索产品。 我的代码执行以下任务: 标记搜索文本并收集包含所有搜索词的productName 按productCode排序所选内容 选择仅显示productName和productPrice(而不是仅用于orderby的productCode) 此代码中的瓶颈在哪里?如何移除它们? 每次

我有一个xml文件,每个项目包含3条数据:productName、productCode和productPrice。xml文件中的项目数约为7000个

用户可以通过在文本框中键入“red shirt”等方式按名称搜索产品。 我的代码执行以下任务:

  • 标记搜索文本并收集包含所有搜索词的productName

  • 按productCode排序所选内容

  • 选择仅显示productName和productPrice(而不是仅用于orderby的productCode)

  • 此代码中的瓶颈在哪里?如何移除它们? 每次在文本框中输入按键时,我都会执行Linq select,这意味着实时结果更新(而不是等待Enter键)。
    谢谢。

    没有附加探查器和查看输出,我只能猜测什么是慢的

  • 其中textBox1.Text.ToLower.Split(“”)
    可以缓存在查询外部。但我怀疑这是一个严重的问题

  • LINQ转换为XML在非常大的XML文档上可能速度较慢。考虑使用<代码> XmlTextReader <代码>,以仅以前向的方式访问快速(但丑陋)的底层XML。
  • 如果XML符合这一要求,则对内存中的数据进行预处理。内存中的查询应该非常快

  • 您可以使用类似的方法为大量XML文件编制索引,以便快速搜索。这可能有点过头了,但它非常快速且可扩展

  • 多想想这个问题。每次用户按键时,您都在处理XMLDOM并执行一系列字符串操作。处理XML以获得更适合您的任务的表单似乎是一个好的胜利


  • 请注意,这种性质的autocomplete的响应时间非常宽松,最多一秒左右的延迟对于大多数目的来说都是可以接受的。

    您是否尝试分析此代码?结果如何?每次击键时进行全新搜索总是很慢,尽管XML上的Linq可能比索引表上的sql查询慢。如何加速Linq?不要用它。所有的抽象都比较慢。我从来没有做过任何分析。我正在使用VisualStudio2010。将检查此功能是否可用。
      var products = from d in xElem.Descendants(fileName)
                            where textBox1.Text.ToLower().Split(' ').All(t => d.Element(productName).Value.ToLower().Contains(t))
    
                            orderby d.Element(productCode).Value ascending
                            select new
                            {
                                Price = (double.Parse(d.Element(productPrice).Value)).ToString(numberFormat),
                                Name = d.Element(Name).Value
                            };