Использование явных блокировок считается дорогим?
Как правило, нет. Это не считается дорогим. (По модулю, что разные люди имеют разные мнения, а разные приложения предъявляют разные требования.)
Стоимость экземпляра блокировки Object
составляет около 8 байт памяти плюс память для переменной, содержащей ссылку на блокировку. в родительском объекте. Это всего 12 или 16 байт.
Стоимость создания экземпляра блокировки Object
составляет ... несколько наносекунд. (Не совсем точно, сколько, но это тривиально.)
Стоимость восстановления экземпляра блокировки Object
, когда он становится мусором, обычно равна нулю. (Затраты G C возникают, когда замок и его родительский объект не являются мусором ...)
Все эти затраты незначительны, если у вас нет миллионов этих объектов или , чрезмерных Скорость оборота объекта или У вас есть серьезные ограничения памяти или задержки.
(Или, если вы решили установить / использовать блокировки на вещи, которые не нужно блокировать. Но это другая проблема.)
Существует (AFAIK) минимальная разница в стоимость приобретения или снятия блокировки на объекте явной блокировки по сравнению с получением / снятием блокировки на this
. Возможно один доступ к памяти.
Для типичного приложения эти различия в стоимости не будут иметь значения. Будут более важные вещи для оптимизации. Действует стандартная рекомендация:
- Начните с простого 1 . Простое проще писать и отлаживать ... и читать.
- Избегайте оптимизации слишком рано; например, во время написания кода.
- Проведите тестирование и профилируйте свою заявку до , которую вы оптимизируете.
- Используйте результаты измерений, чтобы решить, что стоит оптимизировать.
Проблемы с производительностью, вероятно, становятся незначительными по сравнению с потенциальными проблемами, которые могут быть вызваны блокировкой на this
. На самом деле это зависит от сложности вашего приложения и деталей реализации.
1 - достаточно просто для вас и ваших коллег. Это зависит от контекста.