Сообщество программистов Autodesk в СНГ
ADN Club => Civil 3D API => Адаптация Civil 3D => Тема начата: Doublefish от 20-01-2017, 14:33:10
-
До SP 1 для AutoCAD 2016 в составе Civil 3D проблем не было, команда qsave работала быстро. После установки SP1 на AutoCAD 2016 стала тормозить команда qsave - примерно в два раза дольше стала выполняться по сравнению с AutoCAD 2016 без SP и ранее. По итогу выяснилось, что если задан любой путь через MoveBak и задан в настройках формат сохранения по умолчанию AutoCAD 2007, то команда qsave тормозит (при тех же настройках в 2016 без SP и ранее - не тормозит). Если поставить по умолчанию сохранять в формате AutoCAD 2013, то команда qsave срабатывает быстро как и в предыдущих версиях AutoCAD. Теперь и в AutoCAD 2017 без SP и с SP1 таже проблема - тормозит qsave.
Проверялось на 3-х разных файлах (обычных простых чертежах), в том числе и новом пустом в AutoCAD 2014-2017 в составе Civil 3D - проблема начинается именно в SP 1 для AutoCAD 2016.
Поставить по умолчанию формат сохранения AutoCAD 2013 невозможно, установлен формат 2007 чтобы у других сотрудников чертежи открывались (с форматом 2010 таже проблема).
Подскажите пожалуйста, может кто знает что поменялось начиная с SP 1 для AutoCAD 2016 в команде qsave?
Единственный вариант теперь написать свой movebak чтобы команда qsave не тормозила в AutoCAD 2016 SP1 и выше?
-
Единственный вариант теперь написать свой movebak чтобы команда qsave не тормозила в AutoCAD 2016 SP1 и выше?
Если все остальные обновления на Civil 3D 2016 установлены, и это не помогает, то значит переписывать MOVEBAK под себя.
-
Может кто-нибудь уже делал и знает какие-либо "подводные камни"?
Надо ловить завершение команды qsave или как то по другому?
-
Надо ловить завершение команды qsave или как то по другому?
Только ли QSAVE? Сомневаюсь. Думаю, что все команды сохранения, кроме автосохранения.
Кстати, посмотри на всякий случай значение системной переменной ISAVEPERCENT - она тоже может влиять на скорость сохранения.
-
Надо ловить завершение команды qsave или как то по другому?
Думаю, что в событии Database.SaveComplete ты должен проверить не появился ли соответствующий .bak-файл и если да, то перенести его.
Кстати, так как это просто файловая операция не связанная с AutoCAD .NET AP, Iто ты можешь запустить перенос .bak-файла в отдельном потоке (Thread). При этом пользователю не нужно будет ничего ждать и он сможет продолжить работу.
-
Кстати, так как это просто файловая операция не связанная с AutoCAD .NET AP, Iто ты можешь запустить перенос .bak-файла в отдельном потоке (Thread).
В развитие этой идеи. Т.к. это просто файловая операция, ее можно вообще делать без использования AutoCAD/Civil. Я как-то делал небольшую утилитку, которая висела в трее и проверяла все изменяемые и добавляемые DWG файлы в определенной папке на версию. Если версия была неподходящая - всплывало уведомление. Можно сделать подобную и для перемещения BAK файлов.
-
В развитие этой идеи. Т.к. это просто файловая операция, ее можно вообще делать без использования AutoCAD/Civil. Я как-то делал небольшую утилитку, которая висела в трее и проверяла все изменяемые и добавляемые DWG файлы в определенной папке на версию. Если версия была неподходящая - всплывало уведомление. Можно сделать подобную и для перемещения BAK файлов.
Можно, но (!!!) нужно быть уверенным, что в момент когда мы пытаемся копировать, bak-файл не занят и не участвует в операции копирования, чтобы не скопировать не полный bak-файл. В момент Database.SaveComplete это условие очевидно выполнено, а вот из внешнего приложения...