2009-02-04 72 views
2

我当前的要求是接收一个Excel电子表格,用户每周更新一次并能够查询某个字段的文档。Linq到XML和Excel与OledbConnection之间的速度差异?

从现在开始,我将所有Excel(2007)数据全部推送到一个xml文件中(仅当它们上载文件时,然后使用xml),然后保存所有需要的数据(而不是电子表格中的所有列)用于通过Linq-to-XML进行查询;注意xml文件比excel小。

现在我的问题是,与Linq和OledbConnection查询XML文件之间有任何性能差异?我只是增加另一个不必要的步骤? 我想后续的问题是,是否值得它的易用性继续推动到XML。

该文件有大约1000行。

回答

4

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

无论使用哪种解决方案,您找到最自然的:-)

1

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

话虽这么说,我会,使用的OleDbConnection访问Excel工作表会更快,因为你是本地处理数据,但只有这样,才能知道使用是将数据使用System.Diagnostics命名空间中的Stopwatch类或使用分析工具自己测试它。

如果你有大量的数据需要处理,你可能还想考虑把它放在SQL Server中,然后查询它(当然,取决于查询的比例和保存数据所花费的时间) 。

+0

woops,我解决了这个问题 - 这个xml文件也是原生的。我将用秒表进行测试。 – naspinski 2009-02-06 14:01:48

1

我认为重要的是要讨论你对文件进行什么类型的查询。我不得不相信,使用LINQ查询会比oledbconnection更容易查询,尽管我从经验中谈论的比其他任何事情都多。

2

据我了解事物的性能方面代表这样的访问Excel数据。

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

+1

为了进一步回答你的问题。虽然使用OleDbConnection而不是Linq2XML会带来小的整体性能优势,但Linq代码将更易于维护并且易于编写。此外,OleDbConnection代码更脆弱,只有当数据区域是静态时才是非常好的。对于经常更新的动态数据,编程可能非常具有挑战性。 – 2010-12-21 05:04:26

相关问题