У меня есть утилита, предназначенная для передачи объектов вокруг нашей системы. Поскольку это многопоточная среда, утилита делает глубокую копию каждого передаваемого им объекта, чтобы предотвратить любые проблемы безопасности потоков. Я работаю над переходом нашей системы на использование неизменяемых объектов для устранения необходимости в этой копии. Мне интересно, какой лучший (самый быстрый) способ обнаружить, что объект неизменен?Простой способ обнаружения неизменяемости?
Моя первая мысль состояла в том, чтобы просто подобрать атрибут, который мы наносим на все наши неизменные объекты (MessageAttribute). Как вы можете видеть из приведенного ниже профиля производительности, он получает довольно сильный удар (примерно 10 раз для выполнения всех моих других проверок).
Как еще можно обнаружить мои immutables проходя через? Я могу просто сделать сравнение typeof()
, которое выглядит более реалистичным, но это кажется довольно громоздким, и это будет чертовски поддерживать, поскольку мы постоянно добавляем больше неизменяемых.
EDIT: Я забыл упомянуть, что булевы значения переработаны из в переменных с целью профилирования, в действительности, выражения кто есть результат сохраняется в isDefined
на самом деле в else if
заявления, так буду ударяться о В 10 раз меньше, чем показано в этом профиле (меня больше беспокоит среднее время выполнения, чем абсолютное время выполнения).
Я думал, что любой достойный компилятор может оптимизировать это (ну, собственно, потому, что компилятор должен _know_ System.Type неизменен, а его методы не имеют побочного эффекта) ... У меня возникает соблазн профилировать это в выпуске! –
Спасибо за ответ, я отредактировал свой вопрос, чтобы уточнить, что я действительно это сделал, я просто реорганизовал его, чтобы упростить мое профилирование. – GBleaney
@Adriano. NET JIT не приличный ... – usr