Я думаю каждый кто моделировал в Solidworks сталкивался с неожиданным закрытием программы. Вышибает солид довольно часто, но как правило, когда интенсивно открываются и закрываются сложные модели или же при сохранении, что особенно неприятно.
Объекты GDI используются для рисования элементов окна, которые не находятся в графической области в SolidWorks. Для максимальной производительности графическая область использует OpenGL, что дает более прямой доступ к оборудованию для обработки видео. Объекты GDI используются для хром графической области, поэтому каждый раз, когда открывается новый документ, количество объектов GDI, используемых SOLIDWORKS, будет увеличиваться. До этого SOLIDWORKS 2011 SP4, если часть была открыта в сборке и ее собственное окно, когда это окно было закрыто, оно не освободило бы эти объекты GDI. Поведение по умолчанию теперь состоит в том, чтобы освободить эти дескрипторы, однако не все из них освобождаются.
Почему все это связано с сбоем SOLIDWORKS? Windows имеет ограничение по умолчанию, что один процесс может получить доступ только к 10 000 объектов GDI. Поскольку SolidWorks не освобождает все объекты, когда документ закрыт, число, которое он использует, непрерывно увеличивается с каждым новым документом и постепенно подходит к пределу установленному в Windows.
Можно ли это использовать эти знания, чтобы предсказать, когда SOLIDWORKS вышибет? Да, можно.
Если деталь открыта и закрыта несколько раз, количество объектов GDI, которые она использует, не увеличивается. SOLIDWORKS освобождает объекта каждый раз. То же самое относится и к сборкам. Проблема возникает только тогда, когда часть открыта в сборке и открывается в ее собственном окне, а затем закрывается. При первом открытии SOLIDWORKS, он использовал 781 объект без открытых документов. После открытия и закрытия деталей несколько раз, когда сборка открыта, а затем закрывая все документы, он продолжал использовать 1201 объектов. За долгое время это может достигнуть отметки в 10 000, особенно если вы откроете сборку верхнего уровня.
Устранение этой проблемы
По материалам блога javelin-tech
Не надо все валить на криворукость разработчиков, они стараются создать качественный продукт. Причиной неожиданного краха Solidworks является ограничение Windows, что процесс может получить доступ только к 10 000 объектам GDI.
Что такое GDI?
Почему все это связано с сбоем SOLIDWORKS? Windows имеет ограничение по умолчанию, что один процесс может получить доступ только к 10 000 объектов GDI. Поскольку SolidWorks не освобождает все объекты, когда документ закрыт, число, которое он использует, непрерывно увеличивается с каждым новым документом и постепенно подходит к пределу установленному в Windows.
Предупреждение о недостатке ресурсов в Solidworks Resource Monitor |
Предупреждение о недостатке ресурсов Solidworks |
Можно ли это использовать эти знания, чтобы предсказать, когда SOLIDWORKS вышибет? Да, можно.
Прогнозирование сбоя SOLIDWORKS
Как писалось выше, это не является технически крахом, если SOLIDWORKS достигает ограничения 10 000 по объекту, Windows завершает процесс . Это не вызвано ошибкой кода или проблемами с общим доступом к памяти или чем-либо еще, что приводит к сбою. Это просто Windows считает, что SOLIDWORKS потребляет слишком много ресурсов и закрывает его, чтобы вернуть эти ресурсы. Но поскольку есть определенное число, при котором оно закрывается, вы можете предсказать, когда это произойдет. На самом деле это легко контролировать. Просто выполните следующие действия:- Откройте диспетчер задач.
- Щелкните Вид, Выбрать столбцы ...
Выбор столбцов |
Выберите объекты GDI и USER.
Отображение объектов GDI |
Как можно избежать этой проблемы? Не держите свои сборки открытыми, если они вам не нужны, и периодически проверяйте свой диспетчер задач, чтобы узнать, сколько объектов вы используете. Закрытие SOLIDWORKS и его открытие сбросят этот счетчик. Кроме того, вы можете увеличить максимальное количество объектов GDI, которые может использовать процесс, увеличив количество открытых объектов GDI одним процессом. Для этого в реестре необходимо увеличить следующие параметры:
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\GDIProcessHandleQuota
- Устанавливает количество GDI объектов, диапазон значений 256~65536, по умолчанию 10 000.
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\USERProcessHandleQuota
- Устанавливает количество пользовательских дескрипторов, диапазон значений 200~18000, по умолчанию 10 000.
Увеличьте значения и снизьте риск сбоя Solidworks. При изменении параметров переключитесь в десятичную систему исчисления.
P.S.
При написании статьи для проверки были снижены параметры до 1500, в результате после предупреждения Solidworks Resource Monitor спустя некоторое время солид вышибло на достаточно простой сборке.
Описанные манипуляции относятся только к проблеме GDI, если Solidworks Resource Monitor пишет, что мало памяти, то проблему решит добавление ОЗУ, либо выгрузка других программ.
Описанные манипуляции относятся только к проблеме GDI, если Solidworks Resource Monitor пишет, что мало памяти, то проблему решит добавление ОЗУ, либо выгрузка других программ.
По материалам блога javelin-tech
То что нужно! Спасибо за инфу
ОтветитьУдалитьРад был помочь.
УдалитьВ 10-ке что-то не видно где выбрать GDIи USER
ОтветитьУдалитьВкладка подробности и там закладку добавить GDI и User
Удалитьспасибо
УдалитьКстати, на буржуйском форуме пишут что надо в двух местах заменять это значение GDI:
ОтветитьУдалитьDon't forget, on Windows x64 machines there are 2 places this needs to be changed:
HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Windows
and
HKLM\SOFTWARE\Wow6432Node\Microsoft\WindowsNT\CurrentVersion\Windows
Спасибо!)
ОтветитьУдалитьДОбрый день не работают предложенные методы исправления столь низкого порога вылета программы. При достижении значений объектов GDI = 10000 вылет программы, если не исправлять эти значения то прога выдаст предупреждения и все.
ОтветитьУдалить