Prestanda för F#-verktyg

För att minska bygg- och redigeringskostnaderna återanvänder F# 11 importerade bibliotek och undviker upprepad analys. Mät den berörda arbetsbelastningen i stället för att anta en versionsomfattande prestanda- eller minnesförbättring.

Delning av importerat binärbibliotek

FSharp.Compiler.Service kan dela berättigade importerade biblioteksgrafer mellan projekt som använder samma binära beroenden. FSharpChecker.Create visar shareImportedAssemblies, aktiverad som standard. Detta förhindrar att en fullständig oberoende importerad graf bevaras för varje projekt.

Delning kräver matchande lösta beroenden och importinställningar. Projektreferenser, type providers, sammansättningar med flera moduler och tvetydiga beroendeavslut undantas. Ramverksimporter delades redan.

Implementerings-PR mätte behållet minne efter kontroll och att ha kvar alla projekt. Dess arbetsbelastning ReSharper.FSharp med tio projekt använde 1 547,2 MB utan den här delning och 1 002,2 MB med den. Dess kompilatorlösnings arbetsbelastning ändrades med endast 0,1 %. Det här är ändringsspecifika experiment, inte universella besparingar vid uppgradering. Överlappning i stora binära referenser förklarar mycket av skillnaden.

Behållna metadata jämfört med tillfälliga allokeringar

F# 11 minskar kvarhållen metadata genom lat skapande, mindre tabeller och återanvändning. Separat sett allokerar metadataläsning och inbäddad specialisering mindre tillfälliga data. Retained heap, allokeringsvolym och processminne är olika mått; Lägg inte till resultat från dessa överlappande experiment.

Analys och navigering i redigeraren

Följande förbättringar gäller för olika lager:

Component Arbete som undviks eller avgränsas
Visual Studio diagnostik Återanvänder diagnostik för oförändrade dokument med hänsyn till text- och projektversioner, sökvägar och alternativ. Detta är avsett för upprepad tomgångsanalys, inte godtycklig återanvändning av inaktuella resultat.
Visual Studio Sök alla referenser och Byt namn på Begränsar samtidiga typkontroller i stället för att starta en för varje dokument samtidigt, samtidigt som avbrytning bibehålls.
Sökning efter externa symbolreferenser Hoppar över projekt som inte refererar till symbolens binära assembly.
Inkrementell FCS-analys Synkroniserar builder-tillstånd så att överlappande begäranden inte skapar duplicerade analyskedjor för samma ändring.

Peek-fixen undviker ett dödläge för metadatanavigering. Använd Gå till definition för genererade metadatasignaturer. Peek stannar vid befintliga dokument. Dessa förbättringar kräver uppdaterade redigerare/FCS-komponenter, inte bara ett programs Core-paket.

Samtidig kompilering och bygguppgifter

Parallell kompilering använder oberoende fil- och kompileringsfasarbete som standard i F# 11. Källordning är fortfarande en del av språket. parallellitet legaliserar inte framåtriktade beroenden.

Byggaktiviteter använder också MSBuilds miljö- och sökvägsresurser per aktivitet i stället för att ändra processglobalt tillstånd. Överlagringscachelagring minskar den upprepade uppslagningen, och kompilering med skyddat mönster undviker explosiv duplicering i vissa kombinationer av disjunktion/vakt.

Jämför mätvärdet du behöver

  • För buildlatens jämför du motsvarande fullständiga byggen med identiska optimeringsinställningar, deterministiska utdata, referenser och cacheinställningar. Använd --parallelcompilation- för en kontrollerad jämförelse.
  • För kvarhållet minne vid analys ska du hålla samma projekt vid liv och skilja livehanterat minne från allokeringsvolym och processminne.
  • För responsivitet, återskapa redigeringsåtgärden eller inaktiv arbetsbelastning. Ett konsolprograms utdata mäter inte en redigerarens arbete.

Se även