|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Асаd 2007 жрет память в методе SetXData. Как решить?
Регистрация: 14.08.2009
Сообщений: 10
|
||
Просмотров: 4585
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Я бы сначала очищал РД, и только потом записывал новые...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Расширенные данные.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 14.08.2009
Сообщений: 10
|
для расширенных данных существует только два метода SetXData и GetXData (других в хелпе не нашел).
кроме того, если вывести записанные данные в приведенной выше процедуре методом GetXData, то будет четко видно, что РД не дублируются и рост памяти происходит по другой причине. то же самое вобщем то наблюдал и в Акад 2009 (2010 не ставил). судя по всему это оно так работает, но как бы подчистить память не закрывая приложение?? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Я с РД уже бог знает сколько не работал... Напомни, сколько там ограничение объема? 16 кило?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 14.08.2009
Сообщений: 10
|
Цитата:
для других программ я пользуюсь теми же методами, тоже очень удобно и проблема ресурсов в них не стоит, т.к. за сеанс работы происходит менее 10000 записей собственно расширенные данные для меня тем и удобны, что позволяют сохранять результаты расчетов непосредственно в документе DWG Цитата:
то же самое касается Xrecord - только его удобно применить для какого-нибудь абстрактного объекта, например, размерная цепь, где размерная цепь - словарь, составляющие звенья - записи этого словаря и каждой записи можно назначить свойства звеньев (длину, квалитет и т.п.) Цитата:
но согласно формату dfx для кодов 1060-1070: 16-bit integer value, для 1000: String (with the introduction of extended symbol names in AutoCAD 2000, the 255-character limit has been increased to 2049 single-byte characters not including the newline at the end of the line) Последний раз редактировалось parkovaya1, 14.08.2009 в 15:16. |
|||
![]() |
|
||||
Цитата:
P.S.: Вообще-то на VBA я не пишу, но попробуй в конце кода поставить: Код:
Последний раз редактировалось Александр Ривилис, 14.08.2009 в 15:21. |
||||
![]() |
|
||||
Регистрация: 14.08.2009
Сообщений: 10
|
Цитата:
Самое для меня странное - это то что в приведенном мной примере процедуры происходит многократная запись одного и того же массива XData в одну и ту же XRecord, данные не дублируются (проверено методом GetXData и проверено что обнуление записью массива с одним значением тоже не работает). Так на что в таком случае расходуется оперативная память?? Цитата:
с новыми версиями так же есть осложнения, у меня установлена х64 система, а для х64 редакций Акад начиная с 2008 непрямая поддержка VBA (точно не помню как это формулируется, оговаривается что микрософт не планируют х64 версию VB), суть которой в том что необходимо адаптировать программных код (а его уже очень много) чтобы программа, которая работает х32 версии заработала на х64 и вобще на старших версиях программы советуют переходить на VB.NET, т.е. выбросить то что сделано на помойку и написать заново ( хотя я пробовал с х32 версией Акада 2009 (когда была такая возможность), все равно утечка есть, 2010 правда не ставил... Последний раз редактировалось parkovaya1, 14.08.2009 в 16:03. |
|||
![]() |
|
||||
Регистрация: 14.08.2009
Сообщений: 10
|
Как оказалось в х64 редакции Акад 2010 существует (хоть и кривая) поддержка VBA. Ожидал большего .... однако, метод SetXdata по-прежнему кушает память, причем, несколько больше чем в Акад 2007. К тому же время выполнения приведенной выше программы в Акад увеличивается в разы. Вобщем впечатления от 2010 када в этом плане отрицательные.
Придется переходить на англоязычный форум, возможно так кто-нибудь подскажет путь решения проблемы... |
|||
![]() |
|
||||
Армспорт Регистрация: 18.07.2006
Ейск
Сообщений: 355
|
Не помогут тебе и там! Тебе надо менять подход к своей программе.
Ещё раз повторю - использовать ресурсы программы надо рационально. Если твоя программа переписывает много раз одни и те жи РД, то надо использовать для этого простые переменные а в РД зписывать конечный результат. Так будет и в разы быстрее и с памятью проблем таких не будет. Посмотри внимательно на РД - это некий список, относящийся к какому-то объекту и имеющий некое имя, по которому ты и можешь обратиться к этому списку. Когда ты создаешь РД, то добавляется новый список в общую базу данных Автокада, а к объекту добавляется лишь ссылка на эту запись, причём происходит проверка в уже имеющихся ссылках на РД с таким же именем, если уже есть такое, то старая ссылка удаляется из объекта (хотя скорее всего просто помечается как "удаленная"). Но сама запись из общей базы данных не удаляется, поэтому и происходит "утечка памяти" - это естественно для Автокада, так как скорость для него важнее. |
|||
![]() |
|
||||
Регистрация: 14.08.2009
Сообщений: 10
|
Цитата:
сделать все через ж**у, запуская акад из автономного приложения VB и выполняя ту же программу, с периодическим закрытием приложения када, повторным запуском и восстановлением процесса выполнения. касательно ресурсов конечно да, но если бы все было так просто как кажется. в том что я наваял сам алгоритм построен с применением метода SetXdata как одного их ключевых блоков, т.к. через него идет обмен свойствами между объектами, которые так же идентифицируются (на основе дерева объектной модели для той методики, которую я использую) тем же методом, вобщем все очень плотно завинчено, но суть такая, что при кажущейся сложности реализации, программирование методики выполняется практически на лету, т.к. работаешь с объектами и их свойствами, не выдумывая каждый раз алгоритмы для согласования тех же промежуточных данных и т.п. и как ты написал скорость важна не только для Автокада... вот ![]() еще раз спасибо всем, за то что пролили свет на мне доселе непонятное вопрос можно считать исчерпанным |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Мониторы LCD CRT | Разное | 94 | 17.06.2008 10:51 | |
Юмор 2007 | Огурец | Разное | 1172 | 29.12.2007 11:16 |
а как в 2007 АВТОКАДЕ ? | 005 | AutoCAD | 1 | 21.06.2007 20:36 |
Как \"отобрать\" у Windows оперативную память? | ander | Прочее. Программное обеспечение | 32 | 23.03.2007 05:24 |
ЮМОР 2006 =) | Perezz!! | Разное | 1122 | 04.01.2007 00:46 |