2010-11-27 2 views
1

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

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

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

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

Спасибо,

+0

Расчет Поскольку RTD обновляет данные, когда Excel находится в режиме ожидания, он продолжает получать информацию, если Excel находится в режиме ручных вычислений. В этом случае новые данные кэшируются, а текущие значения используются, когда выполняется ручной расчет. – 2010-11-27 04:02:50

ответ

2

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

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

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