.NET zoo di bawah prisma NET Core

Halo semuanya! Hari ini kita melihat berbagai chip dan perubahan yang telah muncul di platform .NET Core dan membandingkannya dengan Framework. Saya memecah artikel menjadi modul untuk pemahaman yang lebih baik. Artikel ini akan menarik bagi mereka yang akan beralih ke .NET Core atau sudah menggunakannya.

Teknologi tumpukan


Saat ini kami memiliki tiga platform: .NET Framework, Mono, dan .NET Core. Setiap platform mencakup teknologi berikut:

NET Framework - WPF, WinForms, ASP.NET (implementasi DNX), WCF
NET Core - UWP, ASP.NET Core, WA, Xamarin (.NET Standard), Avalonia dan lainnya
Mono - Xamarin (PCL, proyek Bagikan), Unity, ASP.NET, WinForms (lintas platform)
NET Core (3.0) - Semuanya sama dengan .NET Core di atas + WPF dan WinForms, ML.NET

Standar NET


Ada juga .NET Standard. Ini adalah sekumpulan kelas, metode, dan antarmuka yang memungkinkan Anda menulis dan menggunakan kode umum untuk semua platform yang tercantum di atas. Anda juga dapat menulis aplikasi konsol di atasnya. Singkatnya, ini adalah PCL yang sama, tetapi berfungsi pada semua platform yang tercantum di atas.

Lintas platform


Saya tidak akan memusatkan perhatian Anda pada ini, saya hanya akan mencantumkan dukungan OS untuk proyek-proyek Core NET:

Windows
Linux
MacOS

Selain itu mendukung peluncuran di bawah prosesor ARM di Linux dan Windows.

Ketergantungan


Sebagai bagian dari kompatibilitas silang, platform pengembangan aplikasi mencakup infrastruktur modular. Ini dikeluarkan melalui NuGet, dan Anda dapat mengakses fungsi batch, daripada satu perakitan besar. Sebagai pengembang, Anda dapat membuat aplikasi ringan yang hanya berisi paket NuGet yang diperlukan, yang akan membuat program Anda lebih aman dan lebih produktif.

Infrastruktur modular juga memungkinkan pembaruan lebih cepat ke platform .NET Core, karena modul yang terpengaruh dapat diperbarui dan dirilis secara terpisah.

Csproj


Sekarang mari kita masuk lebih dalam dan melihat lebih detail apa yang kita miliki di bawah tenda dalam proyek. Saat membuat proyek baru, Anda masing-masing menemukan file MyProject1.csproj (namanya mungkin berbeda). File ini bertanggung jawab untuk pengaturan kompilasi untuk proyek ini, dependensi proyek lain atau pustaka (pustaka), dan banyak lagi.

Saya punya untuk Anda contoh bagaimana saya memutuskan untuk menulis ulang satu proyek ke .NET Standard. Mari kita lihat bagaimana sebelumnya (Kerangka):



Sayangnya, file ini tidak muat di PC saya sepenuhnya (masih ada referensi). Dan sekarang mari kita lihat bagaimana jadinya setelah transfer:



Dalam NET Core dan .NET Standard, csproj telah sangat disederhanakan. Khususnya yang "balistik" mungkin memperhatikan bahwa beberapa telah berubah. Saya menghapus yang tidak perlu dan diganti dengan alat yang lebih nyaman. Setelah menulis ulang csproj, saya perhatikan bahwa bekerja dengan paket-paket NuGet mulai memakan waktu lebih sedikit, dan seperti yang Anda mengerti, mengedit versi csproj baru jauh lebih nyaman, karena tidak berantakan dengan garis-garis tambahan.

Performa & Peningkatan


Diubah Acak
HttpClient yang Dimodifikasi
Siklus yang dioptimalkan
Daftar Dioptimalkan, Array
Aliran yang Dioptimalkan, MemoryStream
Dan masih banyak lagi

Pada artikel ini saya tidak akan mempertimbangkan semua perubahan. Ini akan menjadi artikel terpisah. Tapi mari kita lihat contoh kecil pada koleksi List:

var list = new List<int>(); for (int i = 0; i < 100000000; i++) { list.Add(i); list.RemoveAt(0); } 

Saya menjalankannya melalui benchmarkdotnet.org di kedua platform. Setelah tes, saya mendapat hasil sebagai berikut:

Inti 2.2.4 x64 RyuJIT
Metode : BenchmarkList
Berarti : 370,1 ms
Kesalahan : 0,3761 ms
StdDev : 0,3518 ms

Kerangka 4.7.2 x64 RyuJIT
Metode : BenchmarkList
Berarti : 481.9 ms
Kesalahan : 1.210 ms
StdDev : 1,011 ms

Seperti yang Anda lihat, kecepatan operasi sangat berbeda (kadang-kadang) dalam mendukung Core.

Microsoft berusaha tidak hanya memberi pengembang alat pengembangan yang nyaman, tetapi juga meningkatkan hal-hal dasar yang mengarah pada peningkatan dan optimalisasi proyek Anda.

Kompilasi tingkat


Ini adalah fitur yang membuat runtime lebih adaptif untuk menggunakan kompiler JIT untuk meningkatkan kinerja startup dan memaksimalkan throughput.

 <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp2.2</TargetFramework> <LangVersion>7.3</LangVersion> <!--      --> <TieredCompilation>true</TieredCompilation> <Platforms>AnyCPU;x64</Platforms> </PropertyGroup> </Project> 

Mengkompilasi proyek secepat mungkin.

Mengoptimalkan metode yang paling umum.

Fungsionalitas ini membuat pembangunan proyek Anda lebih cepat dan memberi Anda kinerja yang hampir sama. Kami menguji fungsi ini, dan ini adalah fitur cerdas untuk proyek Core NET, yang mengurangi waktu kompilasi. Kompilasi multilevel sedikit memperlambat pekerjaan aplikasi Anda, saya tidak merekomendasikan untuk memasukkannya ke server produksi, tetapi untuk debugging ada lebih dari fungsi sebenarnya yang menghemat waktu programmer.

Kesimpulan


Microsoft sedang berusaha meningkatkan kehidupan para pengembang platform .NET. Semua "barang" di atas yang telah muncul di perusahaan kami memungkinkan kami untuk membuat lingkungan lebih terbuka dan diperluas. Saya harap Anda menghargainya. Jangan takut untuk beralih ke tumpukan teknologi baru dan menggunakan berbagai fitur.

Terima kasih atas perhatian anda Saya harap Anda menikmatinya.

Source: https://habr.com/ru/post/id451084/


All Articles