Я пытаюсь устранить некоторые проблемы со временем запуска. После некоторого профилирования я обнаружил, что основным виновником является ClassProxyGenerator.GenerateCode. Это занимает 400-600 мс на тип в первый раз. Таким образом, если точка входа в приложение имеет 8 зависимостей (в цепочке), для которых нужны сгенерированные прокси, время запуска приложения увеличивается на 4,8 секунды. Это может показаться не слишком много, но для пользователя это выглядит как возраст.
Какой совет по улучшению?
Обновление:
Я могу воспроизвести время с помощью следующего консольного приложения:
var container = new WindsorContainer();
container.Register(Component.For<Interceptor>()); // dummy IInterceptor...does nothing
container.Register(Component.For<IMyRepository, MyAbstractRepository>().Interceptors<Interceptor>());
var t = DateTime.Now;
var instance = container.Resolve<IMyRepository>();
Debug.WriteLine("Resolved in " + (DateTime.Now - t).TotalMilliseconds);
Выходы где-то между 550 мс и 750 мс.
IMyRepository - это интерфейс репозитория для 30 типов сущностей (сгенерированный шаблоном T4). Он имеет 31 IQueryables, 31 перегрузок Save и 31 перегрузок Delete. MyAbstractRepository является частичным абстрактным классом. Он объявляет те же 3 х 31 методы.
Если я удаляю все методы сохранения и удаления и оставляю только 31 IQueryables И не регистрирую абстрактный репозиторий
container.Register(Component.For<IMyRepository>().Interceptors<Interceptor>());
Я все еще бегаю около 250 мсек для начального поколения.
Это очень (очень-очень) быстрая машина ... поэтому все в реальном мире, вероятно, будет работать медленнее, чем числа, перечисленные выше.