F# eszközök teljesítménye

A buildelési és szerkesztői költségek csökkentése érdekében az F# 11 megosztja az importált kódtárakat, és elkerüli az ismétlődő elemzéseket. Mérje meg az érintett számítási feladatot ahelyett, hogy a kiadási szintű sebességet vagy a memória javulását feltételezi.

Importált bináris könyvtár megosztása

Az FSharp.Compiler.Service megoszthatja a jogosult importált könyvtárgráfokat az azonos bináris függőségeket használó projektek között. FSharpChecker.Create elérhetővé teszi a(z) shareImportedAssemblies elemet, amely alapértelmezés szerint engedélyezett. Így elkerülhető, hogy minden projekthez megőrződjön egy teljes, önálló importált gráf.

A megosztáshoz egyeztetni kell a feloldott függőségeket és az importálási beállításokat. Project hivatkozásokat, típusszolgáltatókat, többmodulos szerelvényeket és nem egyértelmű függőségi lezárásokat kizárjuk. A keretrendszerek importálása már meg volt osztva.

Az implementáló PR az összes projekt ellenőrzése és megtartása után mérte a megtartott memóriát. A tízprojektes ReSharper.FSharp számítási feladat 1547,2 MB-ot használt a megosztás nélkül, és 1002,2 MB-ot. A fordítómegoldás munkaterhelése csak 0,1%-kal változott. Ezek változásspecifikus kísérletek, nem univerzális frissítési megtakarítások. A nagy bináris hivatkozások átfedése magyarázza a különbség nagy részét.

Megőrzött metaadatok és ideiglenes foglalások

Az F# 11 a lusta létrehozás, a kisebb táblák és az újrafelhasználás révén csökkenti a megőrzött metaadatokat . A metaadatok olvasása és a beágyazott specializációk külön-külön kevesebb ideiglenes adatot foglalnak le. A visszatartott heap, az allokációs mennyiség és a folyamatmemória különböző metrikák; ne adjon hozzá eredményeket ezekből az átfedésben lévő kísérletekből.

Szerkesztőelemzés és navigáció

A következő fejlesztések különböző rétegekre vonatkoznak:

Komponens Elkerült vagy korlátozott munka
Visual Studio-diagnosztika A változatlan dokumentum diagnosztikát újra felhasználja a szöveg- és projektverziókkal, elérési utakkal és lehetőségekkel. Ez az ismétlődő üresjárati elemzést célozza, nem pedig az elavult eredmények tetszőleges újrafelhasználását.
Visual Studio Összes hivatkozás keresése és átnevezés Az egyidejű típusellenőrzéseket korlátozza ahelyett, hogy minden dokumentumhoz egyszerre indítanának egyet, miközben megőrzi a megszakítás lehetőségét.
Külső szimbólumokra való hivatkozások keresése Kihagyja azokat a projekteket, amelyek nem hivatkoznak a szimbólum bináris összeállítására.
FCS inkrementális elemzés Szinkronizálja a builder állapotát, hogy az egymást átfedő kérések ne építsenek ismétlődő elemzési láncokat ugyanahhoz a változáshoz.

A Peek fix elkerüli a metaadat-navigációs holtpontot. Használja a Go To Definition funkciót a generált metaadat-szignatúrákhoz; a Peek csak a meglévő dokumentumokig jut el. Ezekhez a fejlesztésekhez frissített szerkesztő-/FCS-összetevőkre van szükség, nem csak egy alkalmazás Core-csomagjára.

Kompilálási és összeállítási feladat egyidejűsége

A párhuzamos fordítás alapértelmezés szerint független fájl- és fordítófázisos munkát használ az F# 11-ben. A forrásrendezés továbbra is a nyelv része marad; a párhuzamosság nem legalizálja az előre irányuló függőségeket.

A buildfeladatok az MSBuild feladatonkénti környezetét és elérésiút-kezelési lehetőségeit is használják a folyamat globális állapotának módosítása helyett. A túlterhelések gyorsítótárazása csökkenti az ismételt feloldást, és az őr-feltételes minta fordítása elkerüli a robbanásveszélyes duplikációt egyes diszjunkció/őr-feltétel kombinációkban.

A szükséges metrika összehasonlítása

  • A buildkésleltetés összehasonlításához hasonlítsa össze az egyenértékű teljes buildverziókat azonos optimalizálási, determinista kimeneti, referencia- és gyorsítótár-beállítások mellett. Használja a(z) --parallelcompilation- elemet ellenőrzött összehasonlításhoz.
  • A megtartott elemzési memória érdekében tartsa életben ugyanazokat a projekteket, és különböztesse meg az élő felügyelt memóriát a foglalási mennyiségtől és a folyamatmemóriától.
  • A válaszkészség vizsgálatához reprodukálja a szerkesztői műveletet vagy az üresjárati terhelést. Egy konzolprogram kimenete nem méri egy szerkesztőprogram teljesítményét.

Lásd még