В настоящее время я пытаюсь оптимизировать производительность кода в приложении Windows Forms .NET 2.0, которое выполняет операции копирования объектов иерархической базы данных.
Вот пример структуры:

Каждый объект в дереве представлен строкой таблицы базы данных.Кроме того, для каждого объекта также есть несколько связанных «побочных объектов».Например, контрольный пример объект также имеет
- 1..n разрешений
- 1..n атрибутов
- 1..n вложений
- ...
Эти "побочные объекты" хранятся в отдельных таблицах базы данных.
Копирование деревьев
Пользователь приложений может выбрать элемент дерева, щелкнуть правой кнопкой мыши и выбрать «копировать», а затем вставить его позже в другую позицию дерева.
Эта операция копирует все дочерние объекты и все «побочные объекты» вновое местоположение.
С точки зрения базы данных это может быть несколько сотен или даже тысяч операторов SELECT
и INSERT
, в зависимости от размера дочернего дерева для копирования.
Изс точки зрения пользователя, отображается диалоговое окно прогресса, чтобы сохранить отзывчивость интерфейсаКроме того, большинство пользователей жалуются, что для выполнения операции «... простое копирование и вставка ...» требуется слишком много времени.
Оптимизация производительности
ИтакМоя цель - ускорить процесс.
Текущий алгоритм работает примерно так:
- Чтение объекта из БД.
- Сохранение этого объекта как новой записи в БД.
- Сделайте то же самое для всех «побочных объектов» для объекта.
- Рекурсивно сделайте то же самое для всех дочерних объектов объекта.
Как вы можете себе представить, для большогоколичество объектов, которое быстро суммируется с большим количеством операций с базой данных.
Поскольку у меня пока нет понятия о том, как оптимизировать (пакетные операции? но тогда как и для какого объекта?), мой вопросследующим образом.
Мой вопрос
Можете ли вы дать мне какие-либо советы / шаблоны / лучшие практики о том, как клонировать большое количество иерархически связанных объектов, как описано выше?
(в идеале, без учета базы данных, хотя в большинстве случаев бэкэнд является Microsoft SQL Server)