Проблема в функции random () Если вы удалите случайный код из вашего кода. Оба ядра пытаются получить доступ к общему состоянию случайной функции. Ядра работают последовательно и тратят много времени на синхронизацию кешей. Такое поведение известно как ложное разделение. Прочтите эту статью False Sharing
using
оператор только знает о Dispose()
, но Stream.Dispose
вызовы Close()
, как зарегистрировано в MSDN:
Обратите внимание, что из-за требований обратной совместимости, реализация этого метода отличается от рекомендуемого руководства Расположить шаблоном. Этот вызовы метода Близко, который затем называет Поток. Расположите (булевская переменная).
вызовы использования Располагают () только. Расположение () метод мог бы звонить Близко (), если, именно так это реализовано.
Близко () не часть интерфейса IDisposable, настолько использующего, не имеет никакого способа знать, нужно ли это назвать или нет. использование будет только звонить, Располагают (), но разумно разработанные объекты окружат себя Расположение () метод.
Я не думаю вызовы использования Близко (), это не имело бы никакого способа знать, что это должно вызвать ту конкретную функцию. Таким образом, это должно звонить, располагают, и это в свою очередь звонит близко.
В классах .NET Близко () вызов Располагают (). Необходимо сделать то же.