Pull to refresh

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

Reading time 2 min
Views 486
Lumber room
Продолжаем отрабатывать корпоративный план по формированию правильного общественного мнения о компании Microsoft и ее технологиях :) Время такое.

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

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

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

Послушать про about
Total votes 17: ↑12 and ↓5 +7
Comments 39

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

Reading time 3 min
Views 654
Lumber room
Итак, привожу решение проблемы из топика habrahabr.ru/blogs/net/69545 — про гарантированное освобождение неуправляемого ресурса.

Как правильно заметил товарищ adontz, проблема решается при помощи CER.
CER — это технология Constrained Execution Region, при помощи которой можно обезопасить свой код, гарантировав ему то, что на некотором его участке гарантированно _не_ случится асинхронного прерывания типа StackOverflow или ThreadAbort, или «отвалился» jitter — всякое бывает, и не всегда есть возможность оставить внешние ресурсы в консистентном состоянии.

Чего?
Total votes 30: ↑24 and ↓6 +18
Comments 20

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

Reading time 4 min
Views 479
Lumber room
В продолжение темы устойчивых приложений и CER (начало тут) — рассмотрим, как подготовить произвольный (или почти произвольный) участок кода для выполнения в регионе Constrained Execution.

Зачем такое надо? Помните, я говорил, что в процессе подготовки к CER происходит инспекция стека и пре-jitt. Но проинспектировать стек, если вызов происходит через интерфейс или виртуальный метод заранее невозможно. Поэтому такой код:
    ...
    RuntimeHelper.PrepareConstrainedRegions();
     try {}
    finally {
         obj.SomeVirtualMethod();
    }
скомпилируется, но в run-time не достигнет желаемого.
Как быть?
Total votes 12: ↑7 and ↓5 +2
Comments 3