如何实现高性能Excel VSTO到SQL Server?

我正在开发Excel 2010 VSTO解决scheme(在Visual Studio 2010中为Excel工作簿进行代码隐藏),并且需要与集中的SQL Server 2008 R2数据源进行交互以进行读取和写入操作。

数据库将在主表中包含多达15,000行以及相关的行。 理想情况下,电子表格将从数据库中填充,asynchronous使用,然后上载以更新数据库。 我关心的是数据量方面的performance。

电子表格将通过Web门户提供下载。

到目前为止我已经考虑过两个解

  1. 作为数据访问层的WCF服务,工作簿在线查询以使用整个必需的数据集填充其表。 一旦更新从工作簿本身触发,更改将被发布到WCF服务。

  2. 从Web门户下载隐藏工作表时,将工作簿的数据预加载到自己的数据中。 通过Web门户上传修改后的工作簿可以保存更改。

在我们的核心function运行之前,我并没有对优化进行太多的调整,但是我不想把自己放在任何一个不错的select上。

我想避免一个场景,我们必须有select地处理一小部分数据,以避免放慢速度 – >将这种行为整合到电子表格中听起来像是不必要的复杂性。

也许有人在这方面有更多的经验可以推荐一种不会在我们脚下射击的方法?

做了类似的事情:

  1. 确保所有数据访问代码都在后台线程上运行。 Excel函数和插件(主要)在UI线程上运行,并且您希望您的UI能够响应。 编组是不重要的(在Excel '03中,它需要一些密码,可能在'10中改变了),但是可能的。

  2. 尽可能使您的互操作性尽可能大。 每个互操作调用都有相当大的开销,所以如果以编程方式进行格式化,请尽可能多地对单元格进行格式化(使用范围)。 这个build议也适用于数据更改 – 您只需要差异更新UI,这意味着将数据集的副本保留在内存中以检测差异。 如果大量UI更新同时进入,则可能需要插入一些人为的暂停(调节),以便在更新时让UI线程显示进度。

  3. 你需要一个中间层应用程序来与SQL Server和各种excel实例交谈。 这可以让你稍后做好事,比如caching,负载均衡,热故障切换等。这可以是WCF服务,也可以是Windows服务。

如果您必须从服务器上下载电子表格文件,则可以使用服务器上的EPPlus生成电子表格,这比使用WCF从Excel应用程序中的插件上传数据要快得多。 如果在表单中没有任何公式,则使用范围读取数据所需的时间要比写入的时间less得多。 同样在WCF中,你可以使用批处理来更新15000行,这需要大约2分钟-5分钟来完成操作