Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aby zmniejszyć koszty kompilacji i edytora, język F# 11 współdzieli zaimportowane biblioteki i unika wielokrotnej analizy. Mierzenie obciążenia, którego dotyczy problem, a nie przy założeniu szybkości całego wydania lub poprawy pamięci.
Importowane współdzielenie biblioteki binarnej
Biblioteka FSharp.Compiler.Service może udostępniać kwalifikowalne grafy zaimportowanych bibliotek między projektami korzystającymi z tych samych zależności binarnych.
FSharpChecker.Create uwidacznia shareImportedAssemblies, domyślnie włączone. Pozwala to uniknąć zachowywania kompletnego, niezależnego zaimportowanego grafu dla każdego projektu.
Udostępnianie wymaga dopasowania rozwiązanych zależności i ustawień importowania. Odwołania do projektu, dostawcy typów danych, wielomodułowe zestawy i niejednoznaczne zamknięcia zależności są wykluczone. Importy frameworku zostały już udostępnione.
PR implementujący mierzył zachowaną pamięć po sprawdzeniu i przechowywaniu wszystkich projektów. Jego dziesięcioprojektowe obciążenie ReSharper.FSharp używało 1547,2 MB bez udostępniania i 1002,2 MB z tym udostępnianiem. Obciążenie rozwiązania kompilatora zmieniło się tylko o 0,1%. Są to eksperymenty dotyczące konkretnych zmian, a nie uniwersalne oszczędności związane z aktualizacją. Nakładanie się dużych odwołań binarnych wyjaśnia znaczną część różnicy.
Zachowane metadane a przydziały tymczasowe
Język F# 11 zmniejsza zachowywane metadane przez tworzenie z opóźnieniem, mniejsze tabele i ponowne użycie. Oddzielnie odczyt metadanych i specjalizacja śródliniowa przydzielają mniej danych tymczasowych. Zatrzymany rozmiar sterty, rozmiar alokacji i pamięć procesu to różne metryki; nie dodawaj wyników z tych nakładających się eksperymentów.
Analiza edytora i nawigacja
Następujące ulepszenia dotyczą różnych warstw:
| Component | Praca unikana lub ograniczona granicami |
|---|---|
| diagnostyka Visual Studio | Ponownie używa diagnostyki niezmienionych dokumentów, uwzględniając wersje tekstu i projektu, ścieżki oraz opcje. Dotyczy to powtarzanej analizy bezczynności, a nie dowolnego ponownego użycia nieaktualnych wyników. |
| Visual Studio Znajdź wszystkie odwołania i Zmień nazwę | Ogranicza równoczesne sprawdzanie typów zamiast uruchamiać sprawdzanie dla każdego dokumentu jednocześnie, zachowując anulowanie. |
| Wyszukiwanie odwołań do symboli zewnętrznych | Pomija projekty, które nie odwołują się do asembacji binarnej symbolu. |
| Analiza przyrostowa usługi FCS | Synchronizuje stan konstruktora, tak aby nakładające się żądania nie konstruowały zduplikowanych łańcuchów analizy dla tej samej zmiany. |
Poprawka Peek zapobiega zakleszczeniu nawigacji po metadanych. Użyj funkcji Przejdź do definicji dla wygenerowanych sygnatur metadanych; funkcja Peek działa tylko w istniejących dokumentach. Te ulepszenia wymagają zaktualizowanych składników edytora/FCS, a nie tylko pakietu podstawowego aplikacji.
Współbieżność kompilacji i zadań budowania
Kompilacja równoległa domyślnie używa niezależnej pracy nad plikami i fazami kompilatora w języku F# 11. Uporządkowanie źródłowe pozostaje częścią języka; równoległość nie legalizuje zależności skierowanych do przodu.
Zadania builda używają również środowiska dla poszczególnych zadań programu MSBuild i mechanizmów obsługi ścieżek zamiast zmieniania globalnego stanu procesu. Buforowanie wyników rozpoznawania przeciążeń zmniejsza potrzebę ponownego rozpoznawania, a kompilacja chronionych wzorców pozwala uniknąć gwałtownego przyrostu duplikacji w niektórych kombinacjach alternatywy/strażnika.
Porównaj potrzebną metrykę
- W przypadku opóźnienia kompilacji porównaj równoważne pełne kompilacje z identycznymi ustawieniami optymalizacji, danych wyjściowych deterministycznych, referencji i pamięci podręcznej. Służy
--parallelcompilation-do kontrolowanego porównania. - W przypadku analizy pamięci zachowanej pozostaw te same projekty uruchomione i odróżniaj aktywną pamięć zarządzaną od woluminu alokacji i pamięci procesu.
- Aby ocenić responsywność, odtwórz akcję edytora lub bezczynne obciążenie. Wynik programu konsolowego nie mierzy pracy edytora.