Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: German от 16-02-2015, 11:47:53

Название: TransactionManager Database или Document
Отправлено: German от 16-02-2015, 11:47:53
Добрый день!

Не в первый раз натыкаюсь на это:
Кстати, еще и замени строку
Код - C#: [Выделить]
using (trans = db.TransactionManager.StartOpenCloseTransaction())
на
Код - C#: [Выделить]
using (trans = doc.TransactionManager.StartOpenCloseTransaction())

Разъясните, пожалуйста, чем лучше?
Название: Re: TransactionManager Database или Document
Отправлено: Александр Ривилис от 16-02-2015, 14:19:07
Применительно к текущему документу и его Database судя по всему это почти одно и тоже. Пожалуй за исключением двух методов, которые есть только у менеджера транзакций документа, но нет у менеджера транзакций базы:
Код - C# [Выбрать]
  1. public void EnableGraphicsFlush(bool doEnable);
  2. public void FlushGraphics();
Первый из этих методов включает/выключает разрешение на обновление изменённой в транзакции графики, а второй выполняет принудительное  обновление этой графики.
В остальном судя по всему они аналогичны, за исключением того, что Document.TransactionManager не применим к базам, которые не являются документами (открыты через Database.ReadDwgFile()). Вот парочка исследований по этому поводу:
http://spiderinnet1.typepad.com/blog/2012/04/database-transactionmanager-and-document-transactionmanager.html
http://spiderinnet1.typepad.com/blog/2012/05/document-transactionmanager-is-nowhere-for-external-databases.html
Название: Re: TransactionManager Database или Document
Отправлено: German от 16-02-2015, 14:50:25
Хм. Во второй ссылке, если я понял верно, рекомендуют использовать Database.TransactionManager для поддержки расширяемости кода.
...
А использование в коде Document.TransactionManager позволяет "сузить код", создавая как бы "контракт" существования документа для базы?
Название: Re: TransactionManager Database или Document
Отправлено: Андрей Бушман от 16-02-2015, 14:52:39
А использование в коде Document.TransactionManager позволяет "сузить код", создавая как бы "контракт" существования документа для базы?
Это позволяет как бы поставить крест на быстрой пакетной обработки чертежей. Тебе придётся под каждый обрабатываемый файл создавать документ, что весьма негативно скажется на производительности. Поэтому я предпочитаю работать в контексте Database. Да и переносимость страдает, но об этом тут говорить не велено... Использовать контекст документа я бы стал только если на это есть веские причины, такие как вызов обозначенных дополнительных методов (что возникает редко).
Название: Re: TransactionManager Database или Document
Отправлено: Александр Ривилис от 16-02-2015, 14:53:12
А использование в коде Document.TransactionManager позволяет "сузить код", создавая как бы "контракт" существования документа для базы?
Для меня более существенна возможность использования двух указанных мной методов, т.е. оперативное управление обновлением графики.
Название: Re: TransactionManager Database или Document
Отправлено: German от 16-02-2015, 15:10:42
Мнения разделились. Я использовал всегда Database и продолжу все-таки использовать его. Для моего случая (Civil3D) Database вообще ключ ко всему...
За разъяснение спасибо!