когда обьект меняется сеттерами-геттерами, то нужно прикладывать нехилые усилия по поддержки консистентности состояния обьекта
поэтому самое гламотное решение — поля задаются только в конструкторе, они публичные и доступны только для чтения
конечно, мегаперфоманса тут ждать не приходится в работе с такими обьектами, а с другой стороны когда это C# работал с большими данными и мегаперфомансом? мне кажется, наоборот, быстрее все только станет, когда уберутся ненужные вызовы апдейтов, которые часто по нескольку раз дергаются не в тему