Performa tooling F#

Untuk mengurangi biaya build dan editor, F# 11 menggunakan bersama pustaka yang diimpor dan menghindari analisis berulang. Ukur beban kerja yang terpengaruh daripada mengasumsikan kecepatan rilis atau peningkatan memori.

Berbagi pustaka biner yang diimpor

FSharp.Compiler.Service dapat berbagi grafik pustaka impor yang memenuhi syarat di seluruh proyek yang menggunakan dependensi biner yang sama. FSharpChecker.Create mengekspos shareImportedAssemblies, diaktifkan secara default. Ini mencegah penyimpanan graf impor independen lengkap untuk setiap proyek.

Untuk berbagi, dependensi yang diselesaikan dan pengaturan impor harus cocok. Referensi proyek, type provider, rakitan multi-modul, dan closure dependensi yang ambigu dikecualikan. Impor kerangka kerja sudah dibagikan.

PR implementasi mengukur memori yang dipertahankan setelah memeriksa dan menahan semua proyek. Beban kerja ReSharper.FSharp sepuluh proyeknya menggunakan 1.547,2 MB tanpa fitur berbagi ini dan 1.002,2 MB dengan fitur berbagi ini. Beban kerja solusi compiler hanya berubah sebesar 0,1%. Ini adalah eksperimen yang khusus untuk perubahan tertentu, bukan penghematan upgrade yang berlaku umum. Tumpang tindih dalam referensi biner besar menjelaskan banyak perbedaannya.

Metadata yang dipertahankan versus alokasi sementara

F# 11 mengurangi metadata yang dipertahankan melalui pembuatan malas, tabel yang lebih kecil, dan penggunaan kembali. Secara terpisah, pembacaan metadata dan spesialisasi sebaris mengalokasikan lebih sedikit data sementara. Tumpukan yang dipertahankan, volume alokasi, dan memori proses adalah metrik yang berbeda; jangan tambahkan hasil dari eksperimen yang tumpang tindih ini.

Analisis dan navigasi editor

Peningkatan berikut berlaku untuk lapisan yang berbeda:

Komponen Pekerjaan dihindari atau diikat
diagnostik Visual Studio Menggunakan ulang diagnostik dokumen yang tidak berubah dengan mempertimbangkan versi teks dan proyek, jalur, serta opsi. Ini menargetkan analisis saat idle yang berulang, bukan penggunaan kembali hasil kedaluwarsa sewenang-wenang.
Visual Studio Temukan Semua Referensi dan Ganti Nama Membatasi pemeriksaan tipe bersamaan daripada meluncurkannya untuk setiap dokumen sekaligus, sambil mempertahankan pembatalan.
Pencarian referensi simbol eksternal Melompati proyek yang tidak mereferensikan assembly biner simbol.
Analisis inkremental FCS Menyinkronkan status penyusun sehingga permintaan yang tumpang tindih tidak membuat rantai analisis duplikat untuk perubahan yang sama.

Peek fix menghindari kebuntuan navigasi metadata. Gunakan Go To Definition untuk signature metadata yang dihasilkan; Peek berhenti pada dokumen yang ada. Peningkatan ini memerlukan komponen editor/FCS yang diperbarui, bukan hanya paket Core aplikasi.

Kompilasi dan konkurensi build task

Kompilasi paralel menggunakan file independen dan pemrosesan fase kompilator secara default di F# 11. Pengurutan sumber tetap menjadi bagian dari bahasa; paralelisme tidak melegalkan dependensi ke depan.

Tugas build juga menggunakan fasilitas lingkungan per tugas dan path milik MSBuild alih-alih mengubah status global proses. Cache overload mengurangi resolusi berulang, dan kompilasi guarded pattern menghindari duplikasi yang meningkat drastis dalam beberapa kombinasi disjunction/guard.

Bandingkan metrik yang Anda butuhkan

  • Untuk latensi build, bandingkan build lengkap yang setara dengan pengoptimalan, output deterministik, referensi, dan pengaturan cache yang identik. Gunakan --parallelcompilation- untuk perbandingan terkontrol.
  • Untuk memori analisis yang dipertahankan, pertahankan proyek yang sama tetap aktif dan bedakan memori terkelola aktif dari volume alokasi dan memori proses.
  • Untuk responsivitas, ulangi tindakan editor atau beban kerja saat idle. Output program konsol tidak mengukur pekerjaan editor.

Baca juga