2011-08-30 60 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中。