Существует некоторый материал в Apache Портативное Время выполнения (APR), что я ожидал бы быть очень солидным.
Еще одна вещь, которую нужно искать, это отображение кода, который выдает исключения. AutoMapper будет ловить их молча, но перехват исключений таким образом влияет на производительность.
Так что если SomethingThatMightBeNull часто имеет значение null, то это отображение будет работать плохо из-за исключений NullreferenceException:
.ForMember(dest => dest.Blah, c.MapFrom(src=>src.SomethingThatMightBeNull.SomeProperty))
Я обнаружил, что внесение такого изменения будет более чем вдвое меньше времени отображения занимает :
.ForMember(dest => dest.Blah, c.MapFrom(src=> (src.SomethingThatMightBeNull == null
? null : src.SomethingThatMightBeNull.SomeProperty)))
Обновление: синтаксис C # 6
.ForMember(dest => dest.Blah, c.MapFrom(src => (src.SomethingThatMightBeNull?.SomeProperty)))
Если ваши подколлекции велики, вы можете использовать «Any ()» вместо «Count> 1». Любая функция должна будет выполнять итерацию только один раз, в то время как счетчику может понадобиться выполнить итерацию коллекции entmes (в зависимости от реализации).
Я исправил ту же проблему, что и ваша. Это также стоит мне 32 секунды за отображение только одного объекта. Итак, я использую opts.Ignore () для работы с каким-то настраиваемым объектом, как показано ниже:
CreateMap<SiteConfiguration, Site>()
.ForMember(x => x.SubSystems, opts => opts.Ignore())
.ForMember(x => x.PointInformations, opts => opts.Ignore())
.ForMember(x => x.Schedules, opts => opts.Ignore())
.ForMember(x => x.EquipmentDefinitions, opts => opts.Ignore());
После этого он стоит всего несколько миллисекунд.