2011-08-30 91 views
3

我们正在开发一种c#for Excel中的股票查找UDF。我们的UDF最终会调用一个Web服务,如果表单有1000个调用我们的Web服务的话,那么这个Web服务可能会非常缓慢。如何提高调用Web服务的Excel UDF的性能?

我注意到,Excel 2010中推出了异步的UDF,以帮助这个http://msdn.microsoft.com/en-us/library/ff955606.aspx#odc_office14_ta_WhatsNewforOffice2010Developers_Excel2010

有没有人尝试这样做,有任何C#示例,或者对改进Web服务类型的UDF在Excel性能的任何其他提示?

+0

喜马修,你最终会采取这个问题哪种方法? –

+0

投诉电话,因为它很容易,但RTD服务器是我认为更好的长期解决方案 –

+0

这很酷。简单听起来不错!感谢更新。 –

回答

0

每当我有这种问题,我总是决定拿出不同的方法来解决这个问题。

在这种情况下,如果有什么办法可以批量了电话,只是让一个Web服务调用,那么这将是最好的事情,你会只有一个往返,而不是1000或什么的。

换句话说,您可以通过1000个细胞进行迭代,并建立一个(相当大的)请求发送到Web服务,并在一次获取所有的信息?然后在返回时将其全部解压缩。

如果这是你自己的web服务(我希望它是,因为你说我们 webservice),那么你应该能够修改它来做到这一点。如果您在调用没有批处理功能的外部Web服务,那么恐怕我不确定如何最好地处理它,除了在单独的线程上激发大量异步UDF。

+0

谢谢。所以你走过Excel表格寻找调用你的webservice的单元格? –

+0

是的,这是计划。然后你将所有这些调用分成一个大的调用(因此需要重写web服务来接受大批量调用)。重点是你需要一次往返服务而不是1000次旅行。 –

2

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

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