Как объединить все RTD-вызовы при запуске Excel? - PullRequest
1 голос
/ 27 ноября 2010

У меня есть RTD-сервер, который получает значения из источника в реальном времени.Проблема в том, что пользователи имеют довольно большие таблицы Excel, близкие к 20 000 формул RTD.Поэтому, когда пользователь открывает лист, запускаются все формулы RTD, в результате чего на сервер отправляется 20 000 запросов.Пока это работает, но сервер может работать намного лучше, если я могу сгруппировать запросы и отправить их на сервер.

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

. Я не уверен, как получить уведомление о том, когда Excel запускает и останавливает вычисление.Пожалуйста помоги.Также, если вы знаете какой-либо другой подход к решению этой проблемы, это было бы здорово.Я использую Excel 2007, C # 3.5

Пожалуйста, помогите.Большое спасибо.Рашми

Спасибо,

1 Ответ

2 голосов
/ 27 ноября 2010

Поскольку вы используете RTD, мне интересно, может ли это сработать:

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

Надеюсь, это имеет смысл.

...