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

发布于 2024-12-02 07:10:25 字数 461 浏览 0 评论 0原文

我们正在为 Excel 开发一种 C# 股票查找 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 的数量?

We are developing a kind of stock lookup UDF in c# for Excel. Our UDF ends up calling a web service, which can be very slow if a sheet has, say 1000 calls to our web service.

I noticed that Excel 2010 has introduced Asynchronous UDFs to help with this http://msdn.microsoft.com/en-us/library/ff955606.aspx#odc_office14_ta_WhatsNewforOffice2010Developers_Excel2010

Has anyone tried this and have any c# examples, or have any other tips on improving the performance of web service type UDFs in Excel?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

ぃ弥猫深巷。 2024-12-09 07:10:25

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

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

You can use Excel RTD to provide asynchronous data retrieval. RTD allows you to push updates to Excel on demand, which means you can return quickly from the UDF call and asynchronously retrieve the data in the background. When the request is complete, you then notify Excel that updated values are available. You can also quite easily batch multiple UDF calls into a single web service request by simply queuing the RTD topics as they arrive and periodically forming a batched request.

Here is a link that describes how to create a basic RTD server in C#. To make the solution more user friendly, you can wrap the RTD worksheet function call in a UDF.

傲世九天 2024-12-09 07:10:25

每当遇到此类问题时,我总是决定想出不同的方法来解决问题。

在这种情况下,如果有任何方法可以批量调用并且只进行一次 Web 服务调用,那么这将是最好的事情,因为您只有一次往返,而不是 1000 次或其他。

换句话说,您可以迭代 1000 个单元格并构建一个(相当大的)请求发送到 Web 服务并立即检索所有信息吗?然后在返回时将其全部拆开。

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

Whenever I've had this sort of issue, I've always decided to come up with a different approach to solve the problem.

In this case, if there's any way you can batch up the calls and just make one webservice call then that would be the best thing as you'd only have one round trip instead of 1000 or whatever.

In other words, can you iterate through the 1000 cells and build up a (fairly big) request to send to the webservice and retrieve all the info at once? Then unpack it all when it returns.

If it's your own webservice (which I'm hoping it is, since you said our webservice), then you should be able to modify it to do this. If you are calling an external webservice with no batch functionality then I'm afraid I'm not sure how best to approach it, other than to fire of numerous asynchronous UDFs on separate threads.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文