Prestaties van F#-tools

Om de buildkosten en de kosten voor de editor te verlagen, deelt F# 11 geïmporteerde bibliotheken en vermijdt het herhaalde analyses. Meet de betreffende workload in plaats van aan te nemen dat er voor de hele release een prestatie- of geheugengebruikverbetering is.

Delen van geïmporteerde binaire bibliotheken

FSharp.Compiler.Service kan in aanmerking komende geïmporteerde bibliotheekgrafieken delen tussen projecten die gebruikmaken van dezelfde binaire afhankelijkheden. FSharpChecker.Create stelt shareImportedAssemblies beschikbaar, standaard ingeschakeld. Dit voorkomt dat voor elk project een volledige, afzonderlijke geïmporteerde graaf wordt bewaard.

Voor delen zijn overeenkomende opgeloste afhankelijkheden en importinstellingen vereist. Project verwijzingen, typeproviders, assembly's met meerdere modules en ambiguë afhankelijkheidsafsluitingen worden uitgesloten. Frameworkimporten zijn al beschikbaar gesteld.

De PR voor de implementatie heeft het behouden geheugen gemeten na het controleren en open houden van alle projecten. De workload van ReSharper.FSharp met tien projecten heeft 1547,2 MB gebruikt zonder deze deling en 1002,2 MB met deze deling. De compileroplossingsworkload is met slechts 0,1% gewijzigd. Dit zijn wijzigingsspecifieke experimenten, niet universele upgradebesparingen. Overlap in grote binaire referenties verklaart veel van het verschil.

Behouden metagegevens versus tijdelijke allocaties

F# 11 vermindert behouden metadata door luie creatie, kleinere tabellen en hergebruik. Afzonderlijk wijzen het lezen van metagegevens en inlinespecialisatie minder tijdelijke gegevens toe. Retained heap, toewijzingsvolume en procesgeheugen zijn verschillende meetwaarden; tel de resultaten van deze overlappende experimenten niet bij elkaar op.

Analyse en navigatie van editor

De volgende verbeteringen zijn van toepassing op verschillende lagen:

Component Werk vermeden of begrensd
Visual Studio diagnostische gegevens Hiermee worden ongewijzigde-documentdiagnoses opnieuw gebruikt, waarbij tekst- en projectversies, paden en opties worden meegenomen. Dit is gericht op herhaalde analyse tijdens inactiviteit, niet op het lukraak hergebruiken van verouderde resultaten.
Visual Studio Alle verwijzingen zoeken en naam wijzigen Hiermee beperkt u gelijktijdige typecontroles in plaats van er één te starten voor elk document tegelijk, terwijl de annulering behouden blijft.
Zoeken naar verwijzingen naar externe symbolen Slaat projecten over die niet verwijzen naar de binaire assembly van het symbool.
Incrementele FCS-analyse Synchroniseert de builderstatus, zodat overlappende verzoeken geen dubbele analyseketens opbouwen voor dezelfde wijziging.

De Peek-oplossing voorkomt een deadlock bij metagegevensnavigatie. Go To Definition gebruiken voor gegenereerde metagegevenshandtekeningen; Peek werkt alleen met bestaande documenten. Deze verbeteringen vereisen bijgewerkte editor-/FCS-onderdelen, niet alleen het Core-pakket van een toepassing.

Gelijktijdigheid van compilatie en build-taak

Parallelle compilatie maakt standaard gebruik van onafhankelijk bestand- en compilerfasewerk in F# 11. Bronvolgorde blijft onderdeel van de taal; parallellisme legaliseert geen voorwaartse afhankelijkheden.

buildtaken maken ook gebruik van MSBuilds omgevings- en padvoorzieningen per taak in plaats van de procesglobale status te wijzigen. Overload-caching vermindert herhaalde resolutie en compilatie van patronen met guards voorkomt explosieve duplicatie in sommige combinaties van disjunctie/guard.

Vergelijk de metriek die u nodig hebt

  • Voor buildlatentie vergelijkt u equivalente volledige builds met identieke optimalisatie-, deterministische uitvoer-, referentie- en cache-instellingen. Gebruik --parallelcompilation- voor een gecontroleerde vergelijking.
  • Voor analysegeheugen dat behouden blijft, houdt u dezelfde projecten actief en onderscheidt u live beheerd geheugen van toewijzingsvolume en procesgeheugen.
  • Om de responsiviteit te testen, reproduceert u de actie van de editor of de inactieve workload. De uitvoer van een consoleprogramma meet het werk van een editor niet.

Zie ook