Linq to XML和使用OledbConnection的Excel之间的速度差异是什么?

3
我的一个当前需求是接收用户每周更新一次的 Excel 电子表格,并能够查询该文档中的某些字段。目前为止,我通过将所有 Excel(2007)数据推送到一个 XML 文件中(只在上传文件时执行一次,然后我使用 XML),这个文件包含了所有需要的数据(并非电子表格中的所有列),可通过 Linq-to-XML 进行查询;请注意,与 Excel 相比,XML 文件更小。
现在我的问题是,使用 Linq 查询 XML 文件和使用 OledbConnection 查询 Excel 文件之间是否存在性能差异?我是否只是增加了另一个不必要的步骤?我想跟进的问题是,为了使用方便,保持将其推送到 XML 是否值得?
该文件大约有 1000 行。
4个回答

4

对于每周只执行一次的任务,我认为无需进行任何优化。相反,您应该专注于可维护和易于理解的解决方案,这样无论是你还是未来的维护人员都可以轻松管理。

使用您觉得最自然的解决方案即可 :-)


2
据我了解,访问Excel数据的性能如下:
从快到慢依次为: 1. 使用C++直接在Excel文件类型上编写自定义第三方供应商软件。 2. 使用OleDbConnection方法,如果需要数据类型,则使用模式文件处理,将Excel视为平面文件数据库。 3. Linq 2 XML方法是仅适用于读/写Excel 2007文件格式的优越方法。 4. 直接使用OOXML SDK进行XML数据操作,并可选地使用第三方xml库。同样仅限于Excel 2007文件格式。 5. 使用Object[,]数组读取单元格区域(使用.Value2属性),并将Object[,]数组再次传递回单元格区域(再次使用.Value2属性)以写入数据。 6. 使用.Cells(x,y)和.Offset(x,y)属性访问器逐个更新和读取单元格。

1
进一步回答你的问题。虽然使用OleDbConnection比linq2XML会有一些整体性能上的好处,但Linq代码将更易于维护和编写。此外,OleDbConnection代码更加脆弱,只有在数据区域是静态的情况下才真正有效。对于经常更新的动态数据,编程可能会非常具有挑战性。 - Anonymous Type

1

你不能使用SqlConnection访问Excel电子表格。很可能,你正在使用OleDbConnection或OdbcConnection。

话虽如此,我猜想,使用OleDbConnection访问Excel表格会更快,因为你是在本地处理数据,但唯一确定适用于你使用的数据的方法是自己进行测试,可以使用System.Diagnostics命名空间中的Stopwatch类或使用性能分析工具。

如果你有大量数据要处理,你也可以考虑将其放入SQL Server,然后查询它(当然,这取决于查询次数与保存数据所需时间的比率)。


抱歉,我已经在问题中修复了 -- XML 文件也将是本地的。我会用秒表进行测试。 - naspinski

1

我认为讨论你在使用文件时进行的查询类型非常重要。我必须相信使用LINQ查询会比oledbconnection更容易得多,尽管我说的更多是基于经验。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接