如何提高调用Web服务的Excel UDF的性能?

时间:2011-08-30 01:59:26

标签: c# .net excel user-defined-functions

我们正在c#中为Excel开发一种股票查询UDF。我们的UDF最终会调用一个Web服务,如果一个工作表有1000个调用我们的Web服务,这可能会非常慢。

我注意到Excel 2010引入了异步UDF来帮助处理这个http://msdn.microsoft.com/en-us/library/ff955606.aspx#odc_office14_ta_WhatsNewforOffice2010Developers_Excel2010

有没有人试过这个并且有任何c#示例,或者有任何其他提示来改进Excel中的Web服务类型UDF的性能?

2 个答案:

答案 0 :(得分:2)

您可以使用Excel RTD提供异步数据检索。 RTD允许您按需将更新推送到Excel,这意味着您可以从UDF调用快速返回并在后台异步检索数据。请求完成后,您通知Excel已更新的值可用。您还可以轻松地将多个UDF调用批量处理为单个Web服务请求,只需在RTD主题到达时对其进行排队并定期形成批量请求。

Here是一个描述如何在C#中创建基本RTD服务器的链接。为了使解决方案更加用户友好,您可以将RTD工作表函数调用包装在UDF中。

答案 1 :(得分:0)

每当我遇到这类问题时,我总是决定采用不同的方法解决问题。

在这种情况下,如果您有任何方式可以批量拨打电话并只拨打一个网络服务电话那么这将是最好的事情,因为您只有一次往返而不是1000或其他。

换句话说,你可以遍历1000个单元格并构建一个(相当大的)请求发送到Web服务并立即检索所有信息吗?然后在它返回时将其解压缩。

如果它是您自己的网络服务(我希望它是,因为您说我们的网络服务),那么您应该能够修改它来执行此操作。如果您正在调用没有批处理功能的外部Web服务,那么我担心我不确定如何最好地处理它,除了在单独的线程上激发大量异步UDF。