Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КонспЛекций_ГСиИО_Козак.doc
Скачиваний:
102
Добавлен:
06.12.2018
Размер:
8.64 Mб
Скачать

Проверка наличия утечек

Существует ряд признаков, по которым можно установить наличие утечек памяти в приложении. Одним из них является выдача исключения OutOfMemoryException (недостаточно памяти). Другой признак — это существенное замедление отклика из-за того, что происходит обмен с файлом подкачки (виртуальной памятью), расположенным на диске. Еще один признак — медленное (или не очень медленное) увеличение значения объема используемой памяти, которое можно посмотреть в диспетчере задач. Если появляются подозрения, что в приложении есть утечка памяти, то нужно прежде всего определить тип памяти, в котором эта утечка имеет место. Это позволит определить область памяти, на которой нужно сосредоточить внимание и усилия при отладке. Рекомендуется использовать монитор производительности (perfmon.exe - Рис. 17) и просматривать там следующие счетчики: Private Bytes (Байт исключительного пользования) в категории Process (Процесс), # Bytes in All Heaps (Байт во всех кучах) в категории .NET CLR Memory (Память CLR .NET) и # of current logical Threads (Текущих логических потоков) в категории .NET CLR LocksAndThreads (Блокировки и потоки CLR .NET).

Счетчик Private Bytes из категории Process указывает объем памяти, выделенной исключительно для данного процесса; эта память не может использоваться другими процессами системы.

Счетчик # Bytes in All Heaps из категории .NET CLR Memory указывает общий суммарный объем памяти, занятой поколениями Gen0, Gen1 и Gen2 и кучей больших объектов.

Счетчик # of current logical Threads из категории .NET CLR LocksAndThreads указывает число логических потоков в AppDomain. Если число логических потоков неожиданно возрастает, то это значит, что в стеках потоков имеются утечки памяти.

Если возрастает значение счетчика Private Bytes и при этом значение счетчика # Bytes in All Heaps остается неизменным, то это значит, что имеются утечки в неуправляемой памяти. Если возрастают значения обоих счетчиков, то это значит, что увеличивается объем памяти в управляемых кучах.

Рис. 17 Монитор производительности

Получение дополнительной информации о пространстве имен и типах сборки

Вы должны уметь находить информацию о нужных вам типах и пространствах имен самостоятельно, инструментов для этой цели много. Вот их краткий перечень:

  • документация .NET SDK (в MSDN);

  • утилита ILDasm.exe;

  • web-приложение ClassView;

  • графическое приложение WinCV;

  • QbjectBrowser, входящий в комплект Visual Studio.NET.

Все эти утилиты поставляются вместе с .NET SDK.

Так же, интерес представляют инструменты дизассемблирования MSIL кода. Которые фактически интерпретируют IL инструкции в читабельный C# код.

Рис. 18 Применение средства дизассемблирования

Вопросы

  1. Платформа .Net. Строительные блоки .Net (CLR, CTS, CLS).

  2. Преимущества C#. Промежуточный язык MS IL.

  3. Библиотека типов, пространства имён, получение дополнительной информации о сборках.

Р2: Лекция №5. Принципы взаимодействия .Net с разработанным кодом

Принципы взаимодействия с разработанным кодом. Преобразование исходных кодов в новый формат. Использование двоичных компонентов для организации взаимодействия (COM, ActiveX, DLL).

Зачем нужна миграция приложений на новую платформу? .Net обособленная платформа, обладающая своими механизмами работы (CLR, CTS, CLS). Однако, в мире уже существует более 200 млрд. строк активно используемого кода. Поэтому успех .NET (впрочем, как и любой другой платформы) во многом будет зависеть от успешности миграции существующих приложений разработанных с использованием определённых технологий.

Преимущества .NET для использования существующих систем:

  • Неизменность языка программирования (сохранение инвестиций (обучение, окружение) психологические преимущества);

  • Возможность использовать старую систему как базу для новых разработок;

  • Межъязыковое взаимодействие и улучшенные возможности для повторного использования без привязки к тому или иному языку программирования или компонентной модели

В .Net можно выделить следующие два направления во взаимодействии с предшествующими технологиями:

  • преобразование исходных кодов в новый формат языков .NET для последующей компиляции

  • использование двоичных компонентов(COM и DLL) для организации взаимодействия с компонентами .NET