Добрый день.
В классе ConfigurationManager.GetSection() в одном из вызываемых методов обнаружил, что у конструкции
if(m_instance == null)
{
lock(m_lock)
{
if(m_instance == null)
{
...
}
}
}
отсутствует первая проверка.
Всегда думал что оператор lock очень ресурсозатратен, поэтому и применяется первая проверка.
Может подскажет кто причину отсутствия первого условия, а так же как это может сказаться на производитеьлности приложения?
Если это уже обсуждалось или описано в какой-либо статье, буду благодарен за ссылку...
Здравствуйте, conceal_blaze, Вы писали:
_>Может подскажет кто причину отсутствия первого условия, а так же как это может сказаться на производитеьлности приложения?
Как самый первый вариант — лажа разработчика (если библиотеки подробно посмотреть рефлектором, там много разных "неочевидных решений" есть — в MS код тоже смертные пишут
). С учетом того, что обычно конфиг не читают в цикле, потеря производительности критической не будет.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Здравствуйте, Александр Кузнецов, Вы писали:
АК>Как самый первый вариант — лажа разработчика (если библиотеки подробно посмотреть рефлектором, там много разных "неочевидных решений" есть — в MS код тоже смертные пишут ). С учетом того, что обычно конфиг не читают в цикле, потеря производительности критической не будет.
Самое интересно что профилировщик не показывает падения производительности на lock, так что есть мысль что так было реализовано специально.