Static CA sprawia, że rozwiązanie buduje mutch wolniej. W moim przypadku> 2x wolniej niż bez CA. Możemy go wyłączyć, ale jest to zła decyzja o utracie mocy. Więc co możemy zrobić?Ulepszanie analizy kodu
Najpierw zobaczmy, jak działa CA.
Budujesz rozwiązanie. Przy każdym projekcie kompilacji po msbuild Skompiluj cel fxcopcmd.exe jest wywoływany ze ścieżkami do złożeń, które powinny być analizowane. fxcopcmd. generuje dziennik CA xml, który jest używany przez VS (lub może strumień wyjściowy). fxcopcmd.exe ładuje złożenia (szybko) i analizuje je synchronicznie, więc tylko jeden procesor jest załadowany, a 3 (w moim przypadku) nie robią nic. Dopiero po zakończeniu CA tworzony jest kolejny projekt w łańcuchu zależności projektu.
Tak więc słabym miejscem w CA było to, że możemy go poprawić - aby wymusić jego działanie równolegle do korzystania z wszystkich procesorów.
widzę takiego rozwiązania
Aby fałszywy fxcopcmd.exe że weźmie parametry z MSBuild, zapamiętać je i natychmiast zgłosić się do msbuild, że wszystko jest w porządku i nie było żadnych błędów (przez CA xml.log, lub plik powiodło się, lub może stream ...). Tak więc MSBUILD zbuduje następny projekt iw tym czasie zadzwonimy do prawdziwego fxcopcmd.exe z zapisanymi parametrami ... jeśli MSBUILD wywoła fxcopcmd.exe w następnym projekcie - zadzwonimy jeszcze raz do pliku fxcopcmd.exe ... być kilka procesów, które będą ładować wszystkie procesory. Po skończeniu prawdziwego pliku fxcopcmd.exe możemy zadzwonić do naszego celu MSBUILD, który będzie wywoływał tylko cel CA z microsoft.common.targtets bez kompilacji, a nasz fałszywy plik fxcopcmd.exe natychmiast zgłasza wyniki (CA skończył w tym czasie i mamy dziennik) do MSBUILD-VS.
Co myślisz? Czy to przyspieszy CA? Dlaczego firma Microsoft nie stworzyła takich pracowników i nie używa tylko jednego procesora w CA?
Dlaczego nie tworzysz innej konfiguracji kompilacji i tylko ją w niej włączasz? Następnie możesz wybrać, kiedy zbudować z nim, czy nie. –