Under the Hood of .NET Memory Management / Под капотом у памяти в .Net: What`s Coming Next
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
В следующей части книги мы взглянем на .NET и CLR с точки зрения памяти. Мы рассмотрим несколько распространённых программных структур и идиом, а также то, какую роль играет память в некоторых распространённых проблемах с производительностью. Глава 4 будет посвящена особенностям .NET Framework в целом, а в главе 5 мы сосредоточим внимание на конкретных типах приложений или конкретных компонентах приложения. _exp_ 03.01.20 в 06:41 |
|
|
Очевидно, что тема обширная, и, хотя в этих главах и упоминаются проблемы, с которыми вы можете столкнуться, всегда имейте в виду, что все приложения отличаются друг от друга. Несмотря на то, что мы описываем обобщённые примеры, конкретные решения могут быть уникальными для конкретных архитектур приложений. Разумеется, мы просто не можем описать все возможные решения, но разработчики и архитекторы смогут воспользоваться содержанием следующих нескольких глав, чтобы определить и исправить проблемы в своих собственных приложениях и инфраструктурах. _exp_ 03.01.20 в 06:58 |
||
|
Язык. _exp_ 03.01.20 в 07:17 |
||
|
Конечно, в некоторых языках некоторые проблемы, с которыми вы можете столкнуться, работая с C# или VB.NET, решаются более эффективно. Какой бы захватывающей эта тема не была, она тоже не входит в сферу охвата этой книги, и, кроме того, из-за растущего числа языков программирования, постоянно расширяется. _exp_ 03.01.20 в 07:23 |
||
|
Наилучшие практики написания кода. _exp_ 03.01.20 в 08:36 |
||
|
Используйте оператор using, чтобы определить область видимости disposable объекта, если это не вызовет исключение. _exp_ 03.01.20 в 08:41 |
||
|
Используйте StringBuilder, когда количество конкатенаций строк неизвестно или содержится в цикле. _exp_ 03.01.20 в 08:44 |
||
|
Инициализируйте capacity объекта StringBuilder разумным значением, если это возможно. _exp_ 03.01.20 в 08:46 |
||
|
Используйте ленивую инициализацию, чтобы отложить стоимость членов класса, если в них нет необходимости при создании объекта. _exp_ 03.01.20 в 08:51 |
||
|
Используйте структуры, чтобы хранить любые неизменяемые одиночные значения размером не больше 16 байтов, которые не будут часто упаковываться. _exp_ 03.01.20 в 08:56 |
||
|
Переопределяйте методы GetHashCode и Equals у структур. _exp_ 03.01.20 в 08:58 |
||
|
Помечайте все поля структуры как readonly. _exp_ 03.01.20 в 09:01 |
||
|
Используйте ключевое слово readonly для тех полей классов, которые должны быть неизменяемыми. _exp_ 03.01.20 в 09:04 |
||
|
Имплементируйте INotifyPropertyChanged на тех компонентных классах, которые могут использоваться в привязке клиентов. _exp_ 03.01.20 в 09:08 |
||
|
Избегайте хранить в памяти большие графы объектов. _exp_ 03.01.20 в 09:10 |
||
|
Избегайте использования беззнаковых численных типов (кроме байта). _exp_ 03.01.20 в 09:12 |
||
|
Предпочитайте CLS-совместимые типы. _exp_ 03.01.20 в 09:15 |
||
|
Помните про замыкание, когда используете анонимные функции. _exp_ 03.01.20 в 09:19 |
||
|
Не передавайте делегатов методам расширения IQueryable. _exp_ 03.01.20 в 09:22 |
||
|
Избегайте излишних агрегатных функций в запросах LINQ. _exp_ 03.01.20 в 09:26 |
||
|
Используйте статические методы, когда нет необходимости получать доступ к состоянию или менять его. _exp_ 03.01.20 в 09:29 |
||
|
Инициализируйте коллекции (например, List<T>) с заданным размером, если он известен. _exp_ 03.01.20 в 09:32 |
||
|
Для больших элементов используйте контент, а не внедрённые ресурсы. _exp_ 03.01.20 в 09:36 |
||
|
В приложениях, размещённых на IIS, установите значение атрибута //compilation/system.web/compilation/debug равным false, прежде чем выпускать в продакшен. _exp_ 03.01.20 в 09:40 |
||
|
Удаляйте обработчики событий, прежде чем избавляться от объекта. _exp_ 04.01.20 в 08:30 |
||
|
Диаграммы симптомов. _exp_ 04.01.20 в 20:54 |
