1. Я посмотрел MSIL для 2-го решения и 5-го. Во втором используется lock, собственно как это и видно из исходника. В пятом не используются локи, по крайней мере я не нашёл. Если я правильно понимаю, то вся хитрость в реализации CLR, которая гарантирует единственность выполнения статического конструктора на AppDomain (возможно эта реализация использует lock в своём unmanaged code, не знаю как проверить). Наверное стоило скомпилировать в native code и проверить так, но я не знаю assembler.
Производительность всегда можно померять.
2. В .NET инстанс статического класса создастся даже тогда, когда есть вызовы его статических членов. Если у нас есть статические члены не связанные по функциональности с нашим "синглтоном", то хотелось бы развязать вызовы этих членов и создании инстанса класса. С другой стороны понятно, что это кривизна дизайна.
3. Так этот вопрос совершенно не касается singleton. Возможно в этом случае lock является лучшим вариантом.
no subject
Производительность всегда можно померять.
2. В .NET инстанс статического класса создастся даже тогда, когда есть вызовы его статических членов. Если у нас есть статические члены не связанные по функциональности с нашим "синглтоном", то хотелось бы развязать вызовы этих членов и создании инстанса класса. С другой стороны понятно, что это кривизна дизайна.
3. Так этот вопрос совершенно не касается singleton. Возможно в этом случае lock является лучшим вариантом.
4. Согласен.