Как стать автором
Обновить

Интересная задачка: повышаем стабильность (robustness) приложений

Время на прочтение2 мин
Количество просмотров568
Продолжаем отрабатывать корпоративный план по формированию правильного общественного мнения о компании Microsoft и ее технологиях :) Время такое.

Итак, вот вам техническая задачка. Насколько я смог найти, ее разъяснения нет даже у Рихтера. К самому решению я надеюсь придти потом, когда будет возможность «подолее невозбранно» посидеть за компьютером, а пока условие.

Как известно, .Net проектировался с оглядкой на возможность глубокого взаимодействия с нативным кодом и COM. Не будем разбираться сейчас, было ли это техническим или политическим решением, важно вот что — взаимодействие с неуправляемым кодом является сложной проблемой, и может попить немало крови разработчика там, где он не ожидал. Предлагаемая задача — одна из этих.

UPD: Решение тут: habrahabr.ru/blogs/net/69650



Представьте себе следующий код:

IntPtr ptr = Marshal.AllocHGlobal(500); // exception
try
{
   // что-то делаем
}
finally
{
   Marshall.FreeHGlobal(ptr);
}
Код выделяет некоторое (500 байт) количество неуправляемой памяти. Ну выделяет и пусть себе выделяет, ну и что?

А вот что


Представьте себе, что этот код исполняется в отдельном потоке; и в тот момент, когда уже произошло выделение памяти, но до того, как указатель на выделенную область неуправляемой памяти был скопирован в переменную IntPtr, поток был прерван при помощи ThreadAbortException. Выделенная неуправляемая память повиснет в процессе и будет освобождена только по завершению процесса. Это не является проблемой для короткоживущих скриптов, но сильно портит жизнь разработчику долгоживущих приложений — серверов приложений, сервисов и прочего mission-critical софта.

Как бы вы решили эту проблему? И есть ли решение? Скептиков с аргументом «это так маловероятно, поэтому нефиг об этом задумываться» огорчу — если возможность есть, она непременно осуществится; и будет очень печально, если это будет происходить только на production. Пишите, я постараюсь отвечать на комментарии оперативно :)
Теги:
Хабы:
Всего голосов 17: ↑12 и ↓5+7
Комментарии39

Публикации

Истории

Ближайшие события

One day offer от ВСК
Дата16 – 17 мая
Время09:00 – 18:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область