Resharper дико тормозит на файлах с LanguageExt
От: Слава  
Дата: 02.12.16 14:47
Оценка:
Мой софт:
Visual Studio Enterprise 2015 update 3 (14.0.25431.1), Resharper Ultimate 2016.2.2

В проекте используется LanguageExt.Core 1.9.2 (не спрашивайте меня — зачем оно, его туда уже притащили и с этим надо жить)

Пример метода
  public Either<ControlException, BoringSectionDTO> RetrieveBoringSection(int employeeId)
            => Prelude.match(_securityService.GetCurrentUserId(), userId =>
                Prelude.match(
                    _boringSectionRepository.RetrieveBoringSection(employeeId, userId),
                    section =>
                        Prelude.match(
                            _subsection1SecurityService.ApplyFieldsSecurity(section.Subsection1),
                            succededSubsection1Applied =>
                                Prelude.match(
                                    _subsection2SecurityService.ApplyFieldsSecurity(
                                        section.Subsection2), succededSubsection2Applied =>
                                        Prelude.match(
                                    _subsection3SecurityService.ApplyFieldsSecurity(
                                        section.Subsection3), succededSubsection3Applied =>
                                        Prelude.match(
                                    _subsection4SecurityService.ApplyFieldsSecurity(
                                        section.Subsection4), succededSubsection4Applied =>

                                            Prelude.Right<ControlException, BoringSectionDTO>(
                                                new BoringSectionDTO
                                                {
                                                    Subsection1 = _typeAdapter
                                                        .Create
                                                        <MetadataObjectContainer<SubsectionType1>,
                                                            MetadataResponse<SubsectionType1DTO>>(
                                                                section.Subsection1),
                                                    Subsection2 = _typeAdapter
                                                        .Create
                                                        <MetadataObjectContainer<SubsectionType2>,
                                                            MetadataResponse<SubsectionType2DTO>>(
                                                                section.Subsection2),
                                                    Subsection3 = _typeAdapter
                                                        .Create
                                                        <MetadataObjectContainer<SubsectionType3>,
                                                            MetadataResponse<SubsectionType3DTO>>(
                                                                section.Subsection3),
                                                    Subsection4 = _typeAdapter
                                                        .Create
                                                        <MetadataObjectContainer<SubsectionType4>,
                                                            MetadataResponse<SubsectionType4DTO>>(
                                                                section.Subsection4),
                                                }),
                                    failToApply => failToApply),
                                    failToApply => failToApply),
                                    failToApply => failToApply),
                            failToApply => failToApply)
                    , failedToRetrieve => failedToRetrieve),
                failedToRertieve => failedToRertieve);



Что здесь происходит — репозиторий (слой persistence) возвращает данные сотрудника из нескольких частей в виде доменного объекта, его части как-то фильтруются перед показом юзеру, затем преобразуются с помощью Autofac в DTO и улетают выше — в вебсервис.

Вроде бы ничего сложного, но — даже при простом перемещении текстового курсора по классу с несколькими такими методами, задержки между нажатием клавиши и перемещением курсора могут составлять 10-15 секунд. Это как-то совсем ненормально. Даже если закрыть файл, решарпер продолжит чего-то напряженно думать, и более того — даже запущенная сборка проекта не останавливает размышления решарпера, которые уже не нужны.

Я не думаю, что в разборе подобного кода есть какая-то большая алгоритмическая сложность, уж не хуже развесистого LINQ.

Можете починить?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.