Эффективная работа в Solidworks

5

Translate

Поиск

понедельник, 2 октября 2017 г.

Крах Solidworks и порог системных ресурсов

Я думаю каждый кто моделировал в Solidworks сталкивался с неожиданным закрытием программы. Вышибает солид довольно часто, но как правило, когда интенсивно открываются и закрываются  сложные модели или же при сохранении, что особенно неприятно.
Не надо все валить на криворукость разработчиков, они стараются создать качественный продукт. Причиной неожиданного краха Solidworks  является ограничение Windows, что процесс может получить доступ только к 10 000 объектам GDI.


Что такое  GDI?

Объекты GDI используются для рисования элементов окна, которые не находятся в графической области в SolidWorks. Для максимальной производительности графическая область использует OpenGL, что дает более прямой доступ к оборудованию для обработки видео. Объекты GDI используются для хром графической области, поэтому каждый раз, когда открывается новый документ, количество объектов GDI, используемых SOLIDWORKS, будет увеличиваться. До этого SOLIDWORKS 2011 SP4, если часть была открыта в сборке и ее собственное окно, когда это окно было закрыто, оно не освободило бы эти объекты GDI. Поведение по умолчанию теперь состоит в том, чтобы освободить эти дескрипторы, однако не все из них освобождаются.

Почему все это связано с сбоем SOLIDWORKS? Windows имеет ограничение по умолчанию, что один процесс может получить доступ только к 10 000 объектов GDI. Поскольку SolidWorks не освобождает все объекты, когда документ закрыт, число, которое он использует, непрерывно увеличивается с каждым новым документом и постепенно подходит к пределу установленному в Windows.




Предупреждение о недостатке ресурсов Solidworks
Предупреждение о недостатке ресурсов в Solidworks Resource Monitor


Предупреждение о недостатке ресурсов Solidworks
Предупреждение о недостатке ресурсов Solidworks


Можно ли это использовать эти знания, чтобы предсказать, когда SOLIDWORKS вышибет? Да, можно.


Прогнозирование сбоя SOLIDWORKS

Как писалось выше, это не является технически крахом, если SOLIDWORKS достигает ограничения 10 000 по объекту, Windows завершает процесс . Это не вызвано ошибкой кода или проблемами с общим доступом к памяти или чем-либо еще, что приводит к сбою. Это просто Windows считает, что  SOLIDWORKS потребляет слишком много ресурсов и закрывает его, чтобы вернуть эти ресурсы. Но поскольку есть определенное число, при котором оно закрывается, вы можете предсказать, когда это произойдет. На самом деле это легко контролировать. Просто выполните следующие действия:


  • Откройте диспетчер задач. 
  • Щелкните Вид, Выбрать столбцы ...
Выбор столбцов

Выберите объекты GDI и USER.

Отображение GDI Objects
Теперь диспетчер задач будет отображать текущее значение объектов GDI и USER для каждого процесса 

Отображение объектов GDI
Если деталь открыта и закрыта несколько раз, количество объектов GDI, которые она использует, не увеличивается. SOLIDWORKS освобождает объекта  каждый раз. То же самое относится и к сборкам. Проблема возникает только тогда, когда часть открыта в сборке и открывается в ее собственном окне, а затем закрывается. При первом открытии SOLIDWORKS, он использовал 781 объект без открытых документов. После открытия и закрытия деталей несколько раз, когда сборка открыта, а затем закрывая все документы, он продолжал  использовать 1201 объектов. За долгое время это может достигнуть отметки в 10 000, особенно если вы откроете сборку верхнего уровня.


Устранение этой проблемы

Как можно избежать этой проблемы? Не держите свои сборки открытыми, если они вам не нужны, и периодически проверяйте свой диспетчер задач, чтобы узнать, сколько объектов вы используете. Закрытие 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 пишет, что мало памяти, то проблему решит добавление ОЗУ, либо выгрузка других программ.



По материалам блога javelin-tech

8 комментариев:

  1. В 10-ке что-то не видно где выбрать GDIи USER

    ОтветитьУдалить
  2. Кстати, на буржуйском форуме пишут что надо в двух местах заменять это значение 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

    ОтветитьУдалить
  3. ДОбрый день не работают предложенные методы исправления столь низкого порога вылета программы. При достижении значений объектов GDI = 10000 вылет программы, если не исправлять эти значения то прога выдаст предупреждения и все.

    ОтветитьУдалить

Примечание. Отправлять комментарии могут только участники этого блога.

Похожие статьи