Комментарии 6
Чтобы без проблем вызывать
IDisposable.Dispose()
несколько раз, необходимо поле_disposed
Это требование необходимо выполнять только в случае, если вы работаете напрямую с неуправляемым ресурсами и только если их повторный Dispose вызовет плохое поведение. Во всех остальных случаях (99%), когда ваш IDisposable класс использует IDisposable поля, это требование можно легко игнорировать.
К слову, чтобы работать с неуправляемыми ресурсами, можно просто использовать SafeHandle (написать свою реализацию для конкретного ресурса) и забыть про паттерн Dispose.
Ну а поле _disposed
фактически нужно, чтобы бросать ObjectDisposedException
.
Многие советы из категории "вредных" либо очевидных (что ToList() делать для Count() не нужно). Главное правило в оптимизациях: померить, найти узкое место, исправить, и повторить нужное количество раз. Обычно это доступ к данным и внешним сервисам...
Выдумывание нового подхода к реализации IDisposable напоминает старый анекдот о стандартах... лучше делать так как завещал дедушка Рихтер, тогда не надо будет над каждой реализацией ломать мозг и всем будет проще читать и понимать код.
Увеличивайте вместимость списка, когда это возможно
1. Не увеличивайте, а «указывайте при создании», чтобы он не увеличивался в процеcсе.
2. Пропущено предложение перед примером кода.
3. Сам пример кода должен быть таким:
var resultList = new List<...>(otherList.Count);
— сразу в конструкторе задаем колво элементов чтобы выделить нужный объем внутреннего массива.Примеры кода в «Интернирование и кэширование строк» и «Не создавайте объекты повторно» одинаковые, да и текст вокруг них похож — в оригинале тоже так но так и должно быть, или я что-то упустил?
Капитанство перемежается с устаревшей информацией, при этом чего-то более-менее свежего нет в принципе.
Добротная антиреклама учебного центра. Впрочем, как всегда.
Как писать на C# аккуратно: память и производительность