【问题标题】:Speed difference between Linq to XML and Excel with a OledbConnection?使用 OledbConnection 的 Linq to XML 和 Excel 之间的速度差异?
【发布时间】:2023-04-06 19:25:01
【问题描述】:

我目前的一个要求是接收用户大约每周更新一次的 Excel 电子表格,并能够查询该文档的某些字段。

截至目前,我运行并将所有 Excel (2007) 数据推送到一个 xml 文件中(当他们上传文件时只有一次,然后我只使用 xml),然后保存所有需要的数据(不是电子表格中的所有列)用于通过 Linq-to-XML 进行查询;注意xml文件比excel小。

现在我的问题是,使用 Linq 查询 XML 文件和使用 OledbConnection 查询 Excel 文件之间是否存在性能差异?我只是添加了另一个不必要的步骤吗? 我想接下来的问题是,为了易用性而继续将其推送到 xml 是否值得。

该文件大约有 1000 行。

【问题讨论】:

    标签: c# xml linq excel linq-to-xml


    【解决方案1】:

    对于每周只做一次的事情,我认为不需要进行任何优化。相反,您应该专注于对您和将来维护解决方案的人来说是可维护和可理解的。

    使用您认为最自然的任何解决方案 :-)

    【讨论】:

      【解决方案2】:

      据我了解,访问 Excel 数据的性能方面就是这样。

      从最快到最慢
      1. 直接在 Excel 文件类型上使用 C++ 自定义第三方供应商软件。
      2. OleDbConnection 方法在数据类型需要时使用模式文件,将 Excel 视为平面文件数据库。
      3. Linq 2 XML 方法,用于仅使用 Excel 2007 文件格式读取/写入数据的高级方法。
      4. 使用 OOXML SDK 和可选的第 3 方 xml 库直接进行 XML 数据操作。再次仅限于 Excel 2007 文件格式。
      5. 使用 Object[,] 数组读取单元格区域(使用 .Value2 属性),然后将 Object[,] 数组再次传递回单元格区域(再次使用 .Value2 属性)以写入数据。
      6. 使用 .Cells(x,y) 和 .Offset(x,y) 属性访问器单独更新和读取单元格。

      【讨论】:

      • 进一步回答您的问题。虽然使用 OleDbConnection 而不是 linq2XML 会带来小的整体性能优势,但 Linq 代码将更易于维护且更易于编写。此外,OleDbConnection 代码更脆弱,只有在数据区域为静态时才真正好用。对于频繁更新的动态数据,编程可能非常具有挑战性。
      【解决方案3】:

      您不能使用 SqlConnection 访问 Excel 电子表格。您很可能使用的是 OleDbConnection 或 OdbcConnection。

      话虽如此,我猜测使用 OleDbConnection 访问 Excel 工作表会更快,因为您是在本地处理数据,但这是了解数据的唯一方法正在使用的是自己测试它,使用 System.Diagnostics 命名空间中的 Stopwatch 类,或使用分析工具。

      如果您有大量数据要处理,您可能还需要考虑将其放入 SQL Server 中,然后对其进行查询(当然,这取决于查询与保存数据所需时间的比率)。

      【讨论】:

      • 糟糕,我在问题中解决了这个问题——xml 文件也是原生的。我会用秒表测试。
      【解决方案4】:

      我认为讨论您对文件执行的查询类型很重要。我必须相信,使用 LINQ 进行查询要比使用 oledbconnection 容易得多,尽管我说的更多是经验。

      【讨论】:

        猜你喜欢
        • 2013-03-25
        • 2021-11-06
        • 1970-01-01
        • 2012-10-19
        • 1970-01-01
        • 2010-09-20
        • 2010-12-17
        • 2014-04-20
        • 2010-09-13
        相关资源
        最近更新 更多