| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Как ускорить срабатывание ReadDwgFile? Может, есть альтернативные решения?

Как ускорить срабатывание ReadDwgFile? Может, есть альтернативные решения?

Ответ
Поиск в этой теме
Непрочитано 30.11.2022, 09:17 #1
Как ускорить срабатывание ReadDwgFile? Может, есть альтернативные решения?
Кулик Алексей aka kpblc
Moderator
 
LISP, C# (ACAD 200[9,12,13,14])
 
С.-Петербург
Регистрация: 25.08.2003
Сообщений: 39,787

Всем доброго. Столкнулся с проблемой, которую вообще не ожидал встретить.
Суть задачи - необходимо открыть сторонний dwg. Использовал стандартный ReadDwgFile - и оно по скорости почему-то уступает (по крайней мере в моих условиях) использовавшемуся в лиспе ObjectDBX.
Простое открытие 19 файлов, весом от 1 до 2 метров каждый под NET кушает 2 минуты. ObjectDBX в некомпилированном (!) лиспе с теми же задачами справляется за максимум 15 секунд.
Открываю кодом типа
Код:
[Выделить все]
 public void TryToOpenFile(string FileName)
{
    Database _fileDb = new Database(false, true);
    try
    {
        _fileDb.ReadDwgFile(FileName, FileShare.ReadWrite, false, "");
    }
    catch
    {
        // На случай, если файл находится в режиме ReadOnly
        string _copyName = Path.Combine(Path.GetTempPath(), Path.GetFileName(FileName));
        File.Copy(FileName, _copyName, true);
        _fileDb.ReadDwgFile(_copyName, FileShare.ReadWrite, false, "");
    }
}
И на ReadDwgFile невероятные потери времени! Что я делаю не так?
---
Уточнение: работа ведется в ACAD2013x64, Windows 7. Перейти на другие версии - не вариант.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 01.12.2022 в 21:10.
Просмотров: 1685
 
Непрочитано 05.12.2022, 10:10
#2
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


тыц?
Сергей812 вне форума  
 
Автор темы   Непрочитано 05.12.2022, 11:07
#3
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Смена режима открытия ничего не принесла: все то же самое. Да я уже и смирился
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.12.2022, 11:09
#4
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


вообще то это
Код:
[Выделить все]
 Using acCurDB As New Database(False, True)
имел в виду)
Сергей812 вне форума  
 
Автор темы   Непрочитано 05.12.2022, 11:19
#5
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Это в обязательном порядке. Проблема в тормозах самого ReadDwgFile - именно там у меня проблема. На лиспе, кстати, все срабатывает замечательно - за полминуты примерно на 30 файлов. В других версиях ACAD - NET работает корректно. И вот только в 2013 такая засада.
А как передать полученный в лиспе vla-указатель на сторонний документ внутрь NET-функции, я не знаю. Да и не нужно этого, наверное
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.12.2022, 11:31
#6
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Это в обязательном порядке.
в using обернуто создание БД?
Код:
[Выделить все]
 using(Database _fileDb = new Database(false, true))
{


}
Сергей812 вне форума  
 
Автор темы   Непрочитано 05.12.2022, 11:35
#7
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


А как же!!

----- добавлено через ~3 мин. -----
https://adn-cis.org/forum/index.php?...51891#msg51891 - там примеры кода. Прошу по голове ногами не охаживать, я еще учусь
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.12.2022, 11:58
#8
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


пока последняя мысль для проверки - объединить usign(database) и db.CloseInput(true). У тебя этого варианта среди тестовых не увидел.
Сергей812 вне форума  
 
Автор темы   Непрочитано 05.12.2022, 12:49
#9
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Может, я не там или не так написал (скорее всего, и то, и другое): тот же пост, строки 28-39:
Код:
[Выделить все]
                     try
                    {
                        _fileDatabase.ReadDwgFile(fileName, FileShare.Read, false, "");
                    }
                    catch
                    {
                        string _copyFileName = Path.Combine(Path.GetTempPath(), Path.GetFileName(fileName));
                        File.Copy(fileName, _copyFileName, true);
                        _fileDatabase.ReadDwgFile(_copyFileName, FileShare.Read, false, "");
                    }

                    _fileDatabase.CloseInput(true);
Это "не то"?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.12.2022, 13:23
#10
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


Test1 строка 25 - создаешь БД без using, в 39 строке - закрываешь CloseInput

Test2 строка 68 - создаешь БД без using, в 83 строке - закрываешь CloseInput

Test3 строка 102 - создаешь БД с using, в 108 строке - закрываешь файл лога, а CloseInput нет.


предлагаю Test4 cделать копированием команды Test3, где будет добавлено CloseInput(true) после ReadDwgFile - т.е. using и closeinput одновременно, и затестить на скорость. Больше пока мыслей нет)
Сергей812 вне форума  
 
Автор темы   Непрочитано 05.12.2022, 13:43
#11
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


О, спасибо за подробные разъяснения, попробую.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.12.2022, 14:02
#12
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


т.е. если без using в цикле по именам файлов создаешь БД, заполняешь ее, а потом на следующей итерации создаешь новую БД - а старая остается "болтаться" в памяти, пока сборщик не подберет (одна же область видимость - тело цикла). Когда он (сборщик) сможет и изволит это сделать - можно только догадываться) И какие еще действия в реализации интерфейса IDisposable реализованы в библиотеках 2013 акада, может какой-нибудь вспомогательный "костыль" дергается - ведь как раз с 2013 акада ввели дополнительные меры безопасности на загрузку приложений, может где накладка получилась в "движке". А в следующих версиях уже поправили. Можно только догадываться)
Сергей812 вне форума  
 
Автор темы   Непрочитано 05.12.2022, 14:17
#13
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Попробовал. Те же фаберже, вид сбоку. Потери что по времени, что по съедаемой памяти плюс-минус одинаковы Так что буду считать это особенностью ACAD2013.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.12.2022, 14:27
#14
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


больше идей нет) А насчет
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А как передать полученный в лиспе vla-указатель на сторонний документ внутрь NET-функции, я не знаю. Да и не нужно этого, наверное
а чем ссылка на документ отличается от ссылки на объект? А насчет нужности это эксперимента решать тебе)
Сергей812 вне форума  
 
Автор темы   Непрочитано 05.12.2022, 14:37
#15
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
а чем ссылка на документ отличается от ссылки на объект?
Ну хотя бы тем, что документ не имеет ObjectId или хендла, насколько я понимаю. А вызывать это надо из-под лиспа. В общем, пока что я забил на проблему, поскольку решения пока найти не удалось.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.12.2022, 17:28
#16
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


видимо, разработчики Аутодеска не могли себе представить ситуацию - что придется считывать содержимое БД чертежа в лиспе и потом интерфейс IAcadDatabase передавать в .Net код
Сергей812 вне форума  
 
Автор темы   Непрочитано 05.12.2022, 19:17
#17
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Offtop: Ага, вааще фантазии никакой! :
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Как ускорить срабатывание ReadDwgFile? Может, есть альтернативные решения?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть ли типовые решения стропильных систем? Michael87 Деревянные конструкции 3 29.04.2019 11:48
Может есть lisp для копирования объектов из разных блоков в пространство чертежа ? Куинбус Флестрин LISP 6 30.12.2016 15:24
Объемный ж/б блок гаража - кто в СПб делает или может чертежи есть ? Макс_ Поиск литературы, чертежей, моделей и прочих материалов 0 19.05.2011 13:31
lmp.shx, znak.shx - перерыл весь интернет - не нашел... может у кого есть? trikata Поиск литературы, чертежей, моделей и прочих материалов 1 22.12.2009 17:52
Манометр. Может есть у кого? mr.MAIL Поиск литературы, чертежей, моделей и прочих материалов 0 01.06.2008 22:35