Изменчивые функции Excel-Dna в электронной таблице с массовым обновлением

Я создал надстройку с помощью Excel-Dna и пометил экспортированные функции как Volatile (IsVolatile=true), что дает мне желаемое поведение. Функции используют простые запросы для извлечения данных из экземпляра SQL Server.

Однако в конкретном случае электронной таблицы с сотнями ячеек, связанных с внешними источниками, пересчет обычно приводит к зависанию экземпляра Excel.

Хотя я хотел бы сохранить функцию Volatile, было бы полезно, если бы я мог пропустить пересчет функции, если, например, входные параметры совпадают, а последний вызов был сделан через крошечный интервал времени. Не уверен, что это целесообразно, но я пытаюсь найти обходной путь, чтобы избежать IsVolatile=False.


person masaishi    schedule 08.12.2020    source источник


Ответы (1)


Вы можете сохранить кеш внутри своей надстройки, в котором хранятся последние возвращенные значения и время последней проверки, используя что-то вроде MemoryCache. Вы также можете подумать о том, можете ли вы сделать функции потокобезопасными. Хотя Volatile, как правило, является плохой идеей — если внутренние данные часто меняются, вам нужна подача в реальном времени — см. серию Примеры RTD Excel-DNA. Это может помочь вам избавиться от volatile, но при этом регулярно обновлять данные (при изменении).

person Govert    schedule 08.12.2020