Как добиться высокой производительности Excel VSTO для SQL Server? - PullRequest
1 голос
/ 04 января 2012

Я работаю над решением VSTO для Excel 2010 (выполняю код для рабочей книги Excel в Visual Studio 2010), и мне необходимо взаимодействовать с централизованным источником данных SQL Server 2008 R2 для операций чтения и записи.

База данных будет содержать до 15 000 строк в основной таблице плюс связанные строки. В идеале электронные таблицы заполняются из базы данных, используются асинхронно, а затем загружаются для обновления базы данных. Я обеспокоен производительностью вокруг объема данных.

Электронная таблица будет доступна для загрузки через веб-портал.

Я рассмотрел два решения:

  1. Служба WCF, действующая в качестве слоя доступа к данным, который рабочая книга запрашивает в строке, чтобы заполнить свои таблицы всем необходимым набором данных. Изменения будут опубликованы в службе WCF после запуска обновлений из самой рабочей книги.

  2. Предварительная загрузка рабочей книги с собственными данными в скрытые рабочие таблицы при загрузке с веб-портала. Изменения будут сохранены путем загрузки измененной рабочей книги через веб-портал.

Я не слишком беспокоюсь об оптимизации, пока у нас не заработает наша основная функциональность, но я не хочу останавливаться на каких-либо хороших вариантах с точки зрения архитектуры в будущем.

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

Может быть, кто-то с большим опытом в этой области может порекомендовать подход, который не выстрелит нам в ногу?

Ответы [ 2 ]

3 голосов
/ 04 января 2012

Сделав аналогично:

  1. Убедитесь, что весь ваш код доступа к данным работает в фоновом потоке.Функции и надстройки Excel (в основном) работают в потоке пользовательского интерфейса, и вы хотите, чтобы ваш пользовательский интерфейс реагировал.Маршаллинг нетривиален (в Excel '03 он требовал некоторого пинвока, возможно, изменился в '10), но возможен.

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

  3. Вы хотите среднююболее приложение для общения с SQL Server и различными экземплярами Excel.Это позволяет вам в дальнейшем делать хорошие вещи, такие как кэширование, балансировка нагрузки, горячее переключение при сбое и т. Д. Это может быть служба WCF, как вы предлагали, или служба Windows.

1 голос
/ 04 января 2012

Если файл электронной таблицы необходимо загрузить с сервера, вы можете использовать EPPlus на сервере для создания электронной таблицы, это будет намного быстрее, чем VSTO, чем вы можете использовать WCF из надстройки в приложении Excel для загрузки данных. Чтение данных с использованием диапазона займет гораздо меньше времени, чем запись, если на вашем листе нет формулы. Также в WCF вы можете использовать пакет для обновления 15000 строк, это займет примерно 2 мин-5 мин для операции enire

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...