autosave

Автор Тема: autosave  (Прочитано 23824 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: autosave
« Ответ #15 : 29-05-2015, 11:59:52 »
У меня почему-то подозрение, что автору нужна система контроля версий.
у меня такого подозрения нет.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: autosave
« Ответ #16 : 29-05-2015, 12:00:28 »
У тебя уверенность? :)
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: autosave
« Ответ #17 : 29-05-2015, 12:02:43 »
У тебя уверенность?
абсолютная. в том, что ему это не нужно :)
Цитата: Привалов Дмитрий
А мне не нужно нового термина - точка восстановления. это именно бэкап через заданный промежуток времени. Это именно то, что ожидают мои пользователи от Autosave. Наверное тоже не стоит спорить.
git посложнее моего варианта будет ;)

Оффлайн Привалов ДмитрийАвтор темы

  • ADN Club
  • *****
  • Сообщений: 532
  • Карма: 117
Re: autosave
« Ответ #18 : 29-05-2015, 12:26:13 »
Тогда я не понял причины наличия этого топика, ведь обозначенный мною выше код работает (без всяких "синглтонов"). Если у тебя такой же, то должен был работать и твой...

Вот теперь Андрей я тебя не понимаю.
Топик был создан т.к. у меня не работал SaveAs при SaveComplete. И ты навел меня на мою ошибку, что SaveAs  тоже вызывает событие SaveComplete.
Твой код появился в этой теме, после поиска проблемы. Мой код был доработан в это же время.
Сейчас он работает.
Так что топик создан правильно. И привел к решению.
Не стоит связывать причину создания топика с появившимся позже, внутри топика - "Синглтон" ;-)

Этой фразы я не понимаю, ну да ладно...
Обсуждение паттернов в разрезе кто, что и как написал, и насколько понятно/непонятно, предлагаю тут не вести. Это темы других форумов.

Дважды в один и тот же AppDomain загрузить одну и ту же Assembly невозможно. Соответственно и регистрация событий будет выполнена лишь единожды, при первой (и ей же последней) загрузке управляемой сборки.
Вот это по теме. AppDomain и Assembly я плохо знаю механизмы, загрузки/выгрузки, поэтому и спросил. Спасибо буду теперь знать)

Оффлайн Привалов ДмитрийАвтор темы

  • ADN Club
  • *****
  • Сообщений: 532
  • Карма: 117
Re: autosave
« Ответ #19 : 29-05-2015, 12:41:00 »
У меня почему-то подозрение, что автору нужна система контроля версий.
Нет. Нужно резервирование их работы в течении дня-трех.
Тут можно долго спорить о том, как должно работать автосохранение/либо резервное копирование.

Если уж так интересно, могу описать проблемы.
На всех компах настроен автосейв, все пользователи обучены его настраивать.  70% знают где посмотреть папку для автосохранения.  Изобретать кнопку или команду для точек восстановления или управление версиями не требуется.

Нужно именно быстро восстановить файл в случае сбоя. А сбои пока частые.(((

Сначала победим сохранение, потом перейдем к причинам:
это разные версии автокадов, proxy, object enabler и другие причины.
RemoveAllProxy частичное решение проблемы, иногда нужно создавать новый файл и переносить объекты.
В одном месте файл тупит при сохранении обычных размеров.

Файлы и автокады от всех этих штук глючат в разные моменты времени. Инфа периодически теряется.

Это все было до меня, архив уже наводнен такими прелестными чертежами, нужно наводить порядок)


Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: autosave
« Ответ #20 : 29-05-2015, 12:43:10 »
А сбои пока частые.
Я бы разбирался с причинами частых "вылетов". Восстановление в данном случае, думаю,- это лечение симптомов, а не болезни.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: autosave
« Ответ #21 : 29-05-2015, 12:43:14 »
Цитата: Привалов Дмитрий
Твой код появился в этой теме, после поиска проблемы. Мой код был доработан в это же время.
теперь понял. я сначала подумал, что это решение и так было тобой найдено ранее, но чем-то тебя не устроило и ты создал тему.

Цитата: Привалов Дмитрий
Обсуждение паттернов в разрезе кто, что и как написал, и насколько понятно/непонятно, предлагаю тут не вести.
Тогда предлагаю их тут и не упоминать, тем самым внося некоторые неясности.

Дважды в один и тот же AppDomain загрузить одну и ту же Assembly невозможно. Соответственно и регистрация событий будет выполнена лишь единожды, при первой (и ей же последней) загрузке управляемой сборки.
Кстати, здесь есть одно НО... Дело в том, что CLR реализована в виде COM сервера. Если мне не изменяет память, то начиная с .NET 4.5 неуправляемое приложение может использовать в своей работе сразу несколько таких COM серверов - по одному для каждой поддерживаемой приложением версии CLR. Это позволяет успешно загружать в исходное неуправляемое приложение написанные для него управляемые плагины, скомпилированные под разные версии .NET: 3.5, 4.0, 4.5, 4.5.1. Каждый плагин грузится в соответствующий ему COM сервер (CLR).

Т.е. если новые версии AutoCAD будут пользоваться такой возможностью, то AutoCAD в разные CLR сможет загрузить две идентичные сборки, отличающиеся лишь тем, что они откомпилированы под разные версии .NET.

В этом случае может получится что у одного и того же (по сути) кода на одно и то же событие происходит регистрация несколько раз (по разу в каждой CLR).

Ещё один момент: один и тот же код может быть скомпилирован под разные версии .NET, использующие одну и ту же версию CLR. Что произойдёт, если юзер попытается загрузить в акад обе сборки? Это опасный случай... Давай посмотрим его на примере этого кода. Во вложении zip файл с результатом пакетной компиляции одного и того же исходного кода под разные версии акадов. В качестве примера буду использовать AutoCAD 2016.

В обозначенную версию AutoCAD можно успешно загрузить как DWG_save_sandbox.R20.0.dll, так и DWG_save_sandbox.R20.1.dll. Первую я откомпилировал как .NET 4.5, а вторую как .NET 4.5.1. Каждая из них работает корректно. НО... После загрузки DWG_save_sandbox.R20.1.dll ты можешь загрузить и DWG_save_sandbox.R20.0.dll (именно в этом порядке). Поскольку фактически это две разные сборки, то ты можешь загрузить и вторую из них... Вот тут и начинается бардак... В консоли автокада ты увидишь сообщение об успешной загрузке (т.е. сборка была успешно загружена, метод Initialize найден и успешно выполнен). Следующим сообщением является сообщение об ошибке.

А вот теперь... Если ты нажмёшь Ctrl + S, то автокад впадёт в тот самый бесконечный цикл о котором я писал ранее и зависнет. В проводнике ты будешь видеть, как массово появляются очередные бэкапы...

Так что на самом деле не всё так гладко в данном вопросе, как хотелось бы...
« Последнее редактирование: 29-05-2015, 13:25:06 от Андрей Бушман »

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: autosave
« Ответ #22 : 29-05-2015, 12:46:55 »
70% знают где посмотреть папку для автосохранения.
Общая папка автосохранения - зло, которое может вылезти боком в самый неподходящий момент. Такая папка должна быть для каждого проекта своя, т.к. юзеры могут работать над разными версиями одного и того же проекта, в результате чего некоторые файлы могут иметь одинаковые имена. В этом случае в общем каталоге автосохранения будет файл того, кто последним выполнил автосохранение. Впрочем это не моя головная боль - решай сам (я лишь предупредил о мине замедленного действия).

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: autosave
« Ответ #23 : 29-05-2015, 12:47:25 »
Андрей Бушман, зачем транзакция в Initialize?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: autosave
« Ответ #24 : 29-05-2015, 12:49:28 »
Андрей Бушман, зачем транзакция в Initialize?
Это код моего общего шаблона в Visual Studio. Я лишь заменил
Код - C# [Выбрать]
  1. // TODO: your code is here...
на конкретный код:
Код - C# [Выбрать]
  1. db.SaveComplete += db_SaveComplete;
Транзакцию убирать не стал, хотя она там и не нужна.

Оффлайн Привалов ДмитрийАвтор темы

  • ADN Club
  • *****
  • Сообщений: 532
  • Карма: 117
Re: autosave
« Ответ #25 : 29-05-2015, 13:04:50 »
А сбои пока частые.
Я бы разбирался с причинами частых "вылетов". Восстановление в данном случае, думаю,- это лечение симптомов, а не болезни.
Все верно, что тут добавишь.

Наверное только то, что каждый день создаются "грязные" чертежи с proxy, берутся и кладутся в архив бесконтрольно.
Архив большой, автоматом пройтись и почистить Proxy - путь к потере инфы, т.к. все это не 100%.
Proxy пользуются, нужно объяснять что нужно разбивать для смежников и класть в архив.
Объяснять можно долго, но 20-30% увы и ах не будут этого делать.  Автоматической проверки и блокировки данного действия на данный момент нет.
Некоторые проблемы не связаны с Proxy, а объектами автокада с неправильной геометрией, стилями, а также Entity without graphics representation, битыми BD чертежей.

Что остается сделать?
правильно уменьшить текущие потери и медленно, поэтапно начинать создавать систему, и именно систему, которая будет уменьшать количество "текущих ошибок" очищая архив и работу)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: autosave
« Ответ #26 : 29-05-2015, 13:10:09 »
Транзакцию убирать не стал, хотя она там и не нужна.
Скорее вредна,о чем мы с тобой недавно говорили.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Привалов ДмитрийАвтор темы

  • ADN Club
  • *****
  • Сообщений: 532
  • Карма: 117
Re: autosave
« Ответ #27 : 29-05-2015, 13:10:55 »
Общая папка автосохранения....
Я не имел ввиду общей папки на сервере. Это локальная папка для каждого юзера, куда автоматически спамяться версии файлов. В случае глюков залезли и восстановили.
Т.е. все то же самое, что и при автосейве, только версии файлов не затираются при "успешном сохранении" и храняться 1-3 дня.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: autosave
« Ответ #28 : 29-05-2015, 13:18:11 »
Я вот только не понял зачем нужно дополнительно вызвать db.SaveAs в db_SaveComplete если операция сохранения уже выполнена. Теперь просто сохранённый файл нужно скопировать/переименовать в нужное место средствами .NET без использования AutoCAD .NET API
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Привалов ДмитрийАвтор темы

  • ADN Club
  • *****
  • Сообщений: 532
  • Карма: 117
Re: autosave
« Ответ #29 : 29-05-2015, 13:24:30 »
Я вот только не понял зачем нужно дополнительно вызвать db.SaveAs в db_SaveComplete если операция сохранения уже выполнена. Теперь просто сохранённый файл нужно скопировать/переименовать в нужное место средствами .NET без использования AutoCAD .NET API
Хорошая мысль, а как гарантированно получить имя сохраненного резервного файла?
Как вариант можно взять последний изменяемый файл, но это может быть не он.
Также нужно проверить создался ли резервный файл или удалился. Т.к. при вызове "_qsave" сохраняется оригинал, а резервный наоборот удаляется.