Я пишу надстройку Excel, используя ExcelDNA, и создаю UDF (определяемую пользователем функцию).
Пользовательская функция устанавливает соединение с сервером, а этот сервер подключается к базе данных SQL, чтобы получить данные и отправить их обратно клиенту.
Однако ожидается, что эта определяемая пользователем функция будет вызываться сотни раз на одном листе.
Я пытаюсь найти способ уменьшить количество запросов к серверу.
На данный момент шаблон выглядит так (упрощенно):
ITEM | JAN 2016 | FEB 2016 | MAR 2016 |
---------------------------------------------------
ITEM 1 | UDF | UDF | UDF |
ITEM 2 | UDF | UDF | UDF |
ITEM 3 | UDF | UDF | UDF |
ITEM 4 | UDF | UDF | UDF |
ITEM 5 | UDF | UDF | UDF |
ITEM 6 | UDF | UDF | UDF |
Итак, прямо сейчас это отправит в общей сложности 18 запросов.
Я хотел бы попытаться уменьшить количество запросов до 6.
Я думаю сделать это прямо сейчас так: для каждого элемента, какой бы запрос ни был отправлен первым, будут получены данные для всех месяцев, перечисленных для этого элемента. Тогда второй запрос на тот же элемент будет просто ждать результата первого запроса.
Например:
Для ПУНКТА 1: если UDF в столбце JAN 2016 вызывается первым, он запросит данные за все месяцы ПУНКТА 1, а затем сохранит эти данные где-нибудь для других запросов.
Затем, когда приходит 2-й запрос (скажем, следующий МАР 2016 г.), эта UDF будет ждать результата UDF от ЯНВАРЯ 2016 г. Таким образом, UDF МАР 2016 г. не нужно будет запускать другое соединение с сервером.
Однако я понятия не имею, как это реализовать. Я слышал о ключевых словах await и async, но не имел опыта их использования.
Любые другие варианты решения проблемы также приветствуются.
async-await
, поскольку он не имеет отношения к пакетной обработке и, в частности, к вашему вопросу. - person cassandrad   schedule 26.08.2016