3

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

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

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

该文件有大约 1000 行。

4

4 回答 4

4

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

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

于 2009-02-06T14:20:00.947 回答
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) 属性访问器单独更新和读取单元格。

于 2010-12-21T05:01:46.327 回答
1

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

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

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

于 2009-02-05T01:13:57.027 回答
1

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

于 2009-02-06T14:11:32.387 回答