Výkon nástrojů F#

Ke snížení nákladů na sestavení a nákladů editoru F# 11 sdílí importované knihovny a zabraňuje opakované analýze. Změřte ovlivněnou pracovní zátěž, místo toho, abyste předpokládali zlepšení rychlosti nebo využití paměti v celé verzi.

Sdílení importované binární knihovny

FSharp.Compiler.Service může sdílet vhodné grafy importovaných knihoven napříč projekty, které používají stejné binární závislosti. FSharpChecker.Create zpřístupňuje shareImportedAssemblies, ve výchozím nastavení je povoleno. Tím se zabrání zachování kompletního nezávislého importovaného grafu pro každý projekt.

Sdílení vyžaduje odpovídající vyřešené závislosti a nastavení importu. Odkazy na projekty, poskytovatelé typů, sestavení s více moduly a nejednoznačně uzavřené závislosti jsou vyloučeny. Importy frameworku již byly sdíleny.

Implementační PR měřilo zachovanou paměť po kontrole a podržení všech projektů. Její desetiprojektová úloha ReSharper.FSharp používala 1 547,2 MB bez tohoto sdílení a 1 002 MB s ní. Zatížení kompilátoru řešení se změnilo pouze o 0,1 %. Jedná se o experimenty specifické pro změny, nikoli univerzální úspory při upgradu. Velký překryv mezi binárními odkazy vysvětluje většinu rozdílu.

Uchovaná metadata oproti dočasným přidělením

F# 11 snižuje množství uchovávaných metadat prostřednictvím opožděného vytváření, menších tabulek a opakovaného použití. Samostatně čtení metadat a vložené specializace přidělují méně dočasných dat. Držená halda, objem alokací a paměť procesu jsou různé metriky; nepřidávejte výsledky z těchto překrývajících se experimentů.

Analýza a navigace v editoru

Následující vylepšení platí pro různé vrstvy:

Component Odvrácená nebo omezená práce
diagnostika Visual Studio Opakovaně používá diagnostiku nezměněného dokumentu s textem a verzemi projektu, cestami a možnostmi, které jsou zohledněny. To se týká opakované nečinné analýzy, ne libovolného opakovaného použití zastaralých výsledků.
Visual Studio Najít všechny odkazy a přejmenovat Omezuje souběžné kontroly typů namísto spouštění jedné pro každý dokument najednou a zároveň zachovává možnost zrušení.
Vyhledávání odkazů na externí symboly Přeskočí projekty, které neodkazují na binární sestavení symbolu.
Přírůstková analýza FCS Synchronizuje stav tvůrce, takže překrývající se požadavky nekonstruují duplicitní řetězce analýzy pro stejnou změnu.

Oprava Peek zabraňuje vzájemnému zablokování navigace metadat. Použijte Go To Definition pro generované signatury metadat; Peek se zastaví u existujících dokumentů. Tato vylepšení vyžadují aktualizované součásti editoru/FCS, nejen balíček Core aplikace.

Kompilace a souběžné spouštění sestavovacích úloh

Paralelní kompilace ve výchozím nastavení využívá nezávislé zpracování souborů a fází kompilátoru v jazyce F# 11. Řazení zdrojů zůstává součástí jazyka; paralelismus nelegalizuje dopředné závislosti.

Úlohy sestavení také místo změny stavu globálního procesu používají prostředí MSBuild pro jednotlivé úlohy a prostředky pro práci s cestami. Ukládání do mezipaměti snižuje opakované rozlišení a kompilace vzorů s guardy zabraňuje explozivní duplicitě v některých kombinacích disjunkcí a guardů.

Porovnejte požadovanou metriku.

  • V případě latence sestavení porovnejte ekvivalentní úplná sestavení s identickou optimalizací, deterministickým výstupem, referencemi a nastavením mezipaměti. Použijte --parallelcompilation- pro řízené porovnání.
  • Pro zachování dat analýzy v paměti ponechte stejné projekty spuštěné a odlište živou spravovanou paměť od objemu přidělování a paměti procesu.
  • Pro testování odezvy reprodukujte akci editoru nebo zátěž při nečinnosti. Výstup konzolového programu neměří práci editora.

Viz také