Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 30226|Jawab: 1

[Inti .NET] Penjelasan terperinci tentang Kumpulan Objek di .NET Core

[Salin tautan]
Dipaparkan pada 2020-4-15 17:38:34 | | | |
Microsoft.Extensions.ObjectPool adalah bagian dari infrastruktur ASP.NET Core yang mendukung penyimpanan sekumpulan objek dalam memori untuk digunakan kembali alih-alih mengizinkan pengumpulan objek sampah.
Jika objek yang ingin Anda kelola adalah, Anda mungkin perlu menggunakan kumpulan objek:

  • Alokasi/inisialisasi mahal.
  • Mewakili beberapa sumber daya yang terbatas.
  • Gunakan secara prediksi dan sering.


Penggunaan kembali adalah topik penting dan masalah yang tak terelakkan yang sering kita temui dalam perkembangan kita sehari-hari.

Untuk mengambil contoh yang paling sederhana dan paling akrab, kumpulan koneksi database adalah koneksi database yang digunakan kembali.

Jadi apa gunanya menggunakan kembali?

Sederhananya, ini mengurangi kehilangan sumber daya yang tidak perlu.

Selain koneksi database, mungkin ada banyak objek lain yang perlu digunakan kembali dalam skenario atau persyaratan yang berbeda, dan ada yang disebut Kumpulan Objek.

Anda harus mengimplementasikan fungsi serupa sendiri, baik dengan ConcurrentBag, atau ConcurrentQueue, atau dengan solusi lain.

Ini juga membagikan implementasi dalam dokumentasi Microsoft

Cara: Membuat kumpulan objek dengan menggunakan ConcurrentBag

Login hyperlink terlihat.

Tentu saja, di .NET Core, Microsoft telah membantu kami mengimplementasikan Kumpulan Objek sederhana.

Pertama, buat proyek konsol .NET Core baru dan gunakan perintah nuget untuk menambahkan paket berikut:

Semua kodenya adalah sebagai berikut:

penggunaan 1



Sebelum membuat kumpulan, kita perlu menentukan Kebijakan. Di sini kita langsung menggunakan DefaultPooledObjectPolicy yang disertakan untuk membuatnya.

Kumpulan objek akan memiliki jumlah utas maksimum yang dipertahankan.

Gunakan metode Get dari objek kumpulan untuk mengeluarkan objek dari kumpulan objek.

Kode di atas menjalankan hasilnya

#1-464d2e03-604d-4451-b68a-8a3a2abdfccc-itsvse.com-1/1/0001 12:00:00
#2-70122aa0-a949-4c63-b878-321efe64c234-itsvse.com-1/1/0001 12:00:00
#3-de717815-796a-4349-a571-047acc125104-itsvse.com-1/1/0001 12:00:00
#4-3a404341-a560-47f7-a3b0-0d477a8ae17f-itsvse.com-1/1/0001 12:00:00
#5-51c96126-d424-4b58-b07c-6408e6c4cea6-itsvse.com-1/1/0001 12:00:00
#6-7ea4d596-fd2a-43b3-959a-9e48da58a758-itsvse.com-1/1/0001 12:00:00
#7-6874c64b-532d-4f92-a4fb-ff472da574a1-itsvse.com-1/1/0001 12:00:00
#8-ca767674-2c07-4f26-975f-4711a31d795d-itsvse.com-1/1/0001 12:00:00
#9-a9cd1859-a919-46a0-ae5d-85b6d3d11ccb-itsvse.com-1/1/0001 12:00:00
#10-fe89ed8b-4dfd-4eef-b876-b2a60ee50958-itsvse.com-1/1/0001 12:00:00
Hasil ini menunjukkan bahwa objek dalam Kumpulan Objek diperbarui secara langsung, dan beberapa properti tidak didevaluasi, yang seringkali tidak memiliki banyak makna praktis saat ini.

Karena DefaultPooledObjectPolicy adalah objek baru secara langsung, berkali-kali, ini bukan yang kita harapkan!

Jika Anda ingin memenuhi penggunaan kami yang sebenarnya, Anda harus menentukan kebijakan sendiri!

Mari kita lihat penggunaan 2

penggunaan 2

Metode Create digunakan untuk membuat objek Demo, dan metode Return adalah untuk membuang objek Demo kembali ke Kumpulan Objek (dipinjam dan dikembalikan).



Kumpulan objek didefinisikan di sini untuk menampung hanya satu objek.

Karena ada operasi pengembalian satu langkah setelah mengeluarkannya dari kumpulan objek, item1 dan item2 harus menjadi objek yang sama.

Setelah mengeluarkan item2 dari kumpulan objek, itu tidak dikembalikan, sehingga kumpulan objek akan membuat objek baru berdasarkan kebijakan yang kami tentukan.

Berikut adalah hasil keluaran dari penggunaan 2:

985b3232-0a45-4115-8480-ad3d42c0ae10-itsvse.com-4/15/2020 03:31:15
985b3232-0a45-4115-8480-ad3d42c0ae10-itsvse.com-4/15/2020 03:31:15
True
8912424a-15c5-4891-b625-25b17eee5c8b-itsvse.com-4/15/2020 3:31:15 AM
False
Anda dapat melihat bahwa properti individu item1, item2 dan item3 adalah sama, dan item1 dan item2 memang objek yang sama. Item3 dan item1 bukanlah hal yang sama.


Penggunaan 3

Anda dapat melihat bahwa item1 dan item2 adalah objek yang sama. Saat mengambil objek dari Kumpulan Objek, yang pertama akan diambil, jadi jika Anda mengembalikannya dan mengambilnya lagi, Anda akan tetap mendapatkan yang asli terlebih dahulu.



item3 diambil langsung dari Object Pool di sana dan tidak dibuat lagi, karena Object Pool di sini mempertahankan beberapa objek, bukan hanya satu dalam penggunaan 2, sehingga diambil langsung dari Pool.

Berikut adalah hasil keluarannya

f3cd5467-536b-4ffe-9c71-de53027b4869-itsvse.com-4/15/2020 03:33:58
f3cd5467-536b-4ffe-9c71-de53027b4869-itsvse.com-4/15/2020 03:33:58
True
b933b593-af6d-4ebe-b21b-e8784d124764-itsvse.com-4/15/2020 03:33:58
False
Sama seperti penggunaan 2, esensinya sama.

penggunaan 4

Tampaknya penggunaan di atas tidak begitu mirip dengan penggunaan normal kita. Kita masih perlu mengandalkan suntikan.

Jadi akhirnya mari kita lihat cara menggabungkan injeksi ketergantungan. Tentu saja, esensi di sini masih tidak terlepas dari dua hal Kebijakan dan Penyedia.



Pertama-tama kita perlu mendaftarkan Provider, dan kemudian langsung mengambil instancenya untuk membuat Object Pool.

Jika Anda ingin menggunakannya di tempat lain, Anda dapat menyuntikkannya melalui konstruktor.

Hasilnya di sini juga sama seperti sebelumnya, tidak banyak yang bisa dikatakan.

ringkasan

Tetapi apa pun jenis penggunaannya, kita perlu memahami bahwa Object Pool tidak dapat dipisahkan dari tiga orang Pool, Policy dan Provider.

Dengan ketiganya, mungkin kita bisa melakukan apa pun yang kita inginkan.

Tentu saja, ia juga menawarkan beberapa hal khusus yang dapat Anda lihat jika Anda tertarik.

LeakTrackingObjectPool

StringBuilderPooledObjectPolicy





Mantan:Pengantar Peningkatan Layanan Web (WSE) 3.0
Depan:Bagaimana cara Visual Studio 2013 menemukan konten yang menggantikan beberapa baris?
 Tuan tanah| Dipaparkan pada 2023-8-30 18:34:07 |
DefaultObjectPool digunakan pada tingkat yang mendasarinyaAntrean BersamaanImplementasi antrean keamanan utas, kode sumbernya adalah sebagai berikut:


Login hyperlink terlihat.


Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com