Как я могу улучшить производительность Excel UDF, которая вызывает веб-сервисы? - PullRequest
3 голосов
/ 30 августа 2011

Мы разрабатываем своего рода UDF поиска в c # для Excel.Наш UDF заканчивает тем, что вызывает веб-сервис, который может быть очень медленным, если на листе есть, скажем, 1000 вызовов на наш веб-сервис.

Я заметил, что в Excel 2010 введены асинхронные пользовательские функции, чтобы помочь с этим http://msdn.microsoft.com/en-us/library/ff955606.aspx#odc_office14_ta_WhatsNewforOffice2010Developers_Excel2010

Кто-нибудь пробовал это и есть какие-либо примеры на C #, или есть другие советы по улучшению производительности веб-службытипа UDF в Excel?

Ответы [ 2 ]

2 голосов
/ 07 мая 2012

Вы можете использовать Excel RTD для обеспечения асинхронного извлечения данных.RTD позволяет отправлять обновления в Excel по требованию, что означает, что вы можете быстро вернуться из вызова UDF и асинхронно получить данные в фоновом режиме.Когда запрос завершен, вы уведомляете Excel, что обновленные значения доступны.Вы также можете довольно легко объединить несколько вызовов UDF в один запрос веб-службы, просто ставя в очередь темы RTD по мере их поступления и периодически формируя пакетный запрос.

Здесь - это ссылка, которая описываетсоздать базовый RTD-сервер в C #.Чтобы сделать решение более удобным для пользователя, вы можете заключить вызов функции таблицы RTD в UDF.

0 голосов
/ 15 октября 2011

Всякий раз, когда у меня возникала такая проблема, я всегда решал придумать другой подход к решению проблемы.

В этом случае, если есть какой-то способ, которым вы можете объединить вызовы и просто сделать один вызов веб-службы, тогда это было бы наилучшим вариантом, поскольку у вас был бы только один прием в оба конца вместо 1000 или чего-то еще.

Другими словами, можете ли вы перебрать 1000 ячеек и создать (довольно большой) запрос для отправки в веб-сервис и получения всей информации за один раз? Затем распакуйте все, когда он вернется.

Если это ваш собственный веб-сервис (который, я надеюсь, так как вы сказали наш веб-сервис), то вы сможете изменить его, чтобы сделать это. Если вы вызываете внешний веб-сервис без пакетной функциональности, то, боюсь, я не уверен, как лучше к нему подойти, кроме как запускать множество асинхронных пользовательских функций в отдельных потоках.

...