Мы моделируем сложную систему, основанную на сложных отношениях сущностей в Dynamics CRM 4.0
Из-за характера разработки нам пришлось реализовать шаблон стиля репозитория, и у нас было много разных поставщиков, которые связаны друг с другом.
Что я действительно хочу сделать, так это профилировать их конструкторов и различных ленивых получателей, но я хочу смоделировать это на самом высоком возможном уровне.
Проблема, конечно, в Scope - если я оберну конструктор в блоке using, он больше не будет доступен ни для чего другого. Если я расширяю блок using так, чтобы все, что ссылается на объект, который я профилировал, попадало в область видимости, то профилировщик не просто профилировал конструктор - он синхронизировал все остальное.
Точно так же, есть уровень вложенности. Если я правильно вложил использование, то код становится нечитаемым.
Я посмотрел на Profiler.Inline, но это не отвечает моим целям.
Что бы я действительно хотел сделать, это:
ref = Profiler.StartStep("Creating CRM Model");
//Do horrible CRM work
var myNewHorribleObject = CRM.ModelHorribleStuff(...);
Profiler.StopStep(ref);
ref = Profiler.StartStep("How long does it take to get X");
var data = Repository.GetSomething(myNewHorribleObject.SomeId);
Profiler.StopStep(ref);
ref = Profiler.StartStep("How long does it take to get Y");
var newData = Repository.GetSomethingElse(myNewHorribleObject.ContextId);
Profiler.StopStep(ref);
Имеет ли это смысл? Надеюсь, я что-то пропускаю в Mini Profiler, но буду рад любым советам!
Я бы хотел немного переделать код, но времени на это нет, и хотя он выглядит странно, у нас на самом деле довольно хорошая цикломатическая сложность.