auto a = std::make_shared<DemoClass>();
for (int i = 0; i < 100000000; i++)
{
auto b = a;
}
В release выполняется секунду.
Аналогичный код на C#
var a = new DemoClass();
for (int i = 0; i < 100000000; i++)
{
var b = a;
}
выполняется 65 мс.
Все из-за lock inc dword ptr [ebx] в крестах. Ибо ниасилили сборщег мусора без лишних монопольных изменений счетчика ссылок.
I love .NET!