Saya sedang menulis IHttpHandler
dan saya perlu menerapkan IsReusable
properti. Saat saya melihat dokumentasi MSDN , tertulis:
Mendapat nilai yang menunjukkan apakah permintaan lain dapat menggunakan instance IHttpHandler.
Ini tidak terlalu membantu. Dalam situasi apa saya harus menggunakan penangan yang dapat digunakan kembali dan dalam situasi apa penangan tersebut tidak dapat digunakan kembali?
Pertanyaan tindak lanjut:
- Apa itu reuse?
- Dapatkah saya mempertahankan status (yaitu variabel kelas) kapan
Reusable = true
??
c#
asp.net
asp.net-mvc
ihttphandler
system.web
Kees C. Bakker
sumber
sumber
Jawaban:
Properti ini menunjukkan jika beberapa permintaan dapat diproses dengan instance IHttpHandler yang sama. Secara default di akhir pipeline permintaan semua penangan http yang ditempatkan di handlerRecycleList dari HttpApplication disetel ke null. Jika penangan dapat digunakan kembali, itu tidak akan disetel ke nol dan instance akan digunakan kembali dalam permintaan berikutnya.
Keuntungan utama adalah kinerja karena akan ada lebih sedikit objek untuk mengumpulkan sampah.
Masalah terpenting bagi penangan yang dapat digunakan kembali adalah bahwa itu harus aman untuk benang. Ini tidak sepele dan membutuhkan usaha.
Saya pribadi menyarankan agar Anda membiarkan nilai default (tidak dapat digunakan kembali) jika Anda hanya menggunakan sumber daya yang dikelola karena Pengumpul Sampah harus dengan mudah menanganinya. Keuntungan kinerja dari penangan yang dapat digunakan kembali biasanya dapat diabaikan dibandingkan dengan risiko memasukkan bug threading yang sulit ditemukan.
Jika Anda memutuskan untuk menggunakan kembali penangan, Anda harus menghindari mempertahankan status dalam variabel kelas karena jika contoh penangan diakses secara bersamaan beberapa permintaan akan menulis / membaca nilai.
sumber
IHttpHandler
denganIsReusable
settrue
dan tidak memiliki masalah. Hal utama yang perlu diingat adalah tidak menyertakan variabel apa pun yang dicakup ke kelas, melainkan menggunakan variabel lokal dalam fungsi Anda.Rupanya, ini membuat penangan tetap di memori dan mampu menangani banyak permintaan. Ketika disetel ke false, itu harus membuat contoh baru dari penangan untuk setiap permintaan yang masuk.
Inilah pertanyaan yang menunjukkan apa yang terjadi jika tidak digunakan dengan benar:
Streaming Gambar Berbasis Data Menggunakan HttpHandler
sumber
Lebih murah untuk mendaur ulang penangan daripada yang baru setiap kali ada permintaan masuk dan server akan menggunakan lebih sedikit memori, memudahkan pekerjaan yang harus dilakukan GC. Jika penangan berada dalam keadaan dimana menangani permintaan baru tidak akan menjadi masalah
(yaitu setiap keadaan dalam contoh penangan telah diatur ulang), maka itu harus memenuhi syarat sebagai dapat digunakan kembali.EDIT
Saya tidak yakin apakah jawaban saya dengan tepat mendefinisikan apa itu reuse. Ini benar-benar memungkinkan untuk penggunaan kembali secara bersamaan, sehingga status yang efektif akan lebih baik dihindari atau dikelola dengan hati-hati dengan cara yang aman untuk thread.
sumber