Saat menulis http handler / module, ada anggota antarmuka untuk mengimplementasikan yang disebut - bool IsReusable .
Apa pentingnya anggota ini? Jika saya setel ke false (atau true), apa artinya ini untuk aplikasi web lainnya?
asp.net
httphandler
ihttphandler
GurdeepS
sumber
sumber
Jawaban:
Titik masuk normal untuk penangan adalah metode ProcessRequest. Namun Anda mungkin memiliki kode di konstruktor kelas yang menyatukan beberapa nilai instance yang mahal untuk dibangun.
Jika Anda menentukan Reusable true, aplikasi dapat menyimpan instance dan menggunakannya kembali dalam permintaan lain hanya dengan memanggil metode ProcessRequest berulang kali, tanpa harus merekonstruksi setiap kali.
Aplikasi ini akan instantiate sebanyak dari penangan ini karena perlu untuk menangani beban saat ini.
Kelemahannya adalah bahwa jika jumlah instance yang dibutuhkan lebih besar dari instance yang ada sekarang, mereka menyebabkan lebih banyak memori yang digunakan. Sebaliknya mereka juga dapat mengurangi penggunaan memori karena nilai instance mereka akan bertahan siklus GC dan tidak perlu sering dialokasikan ulang.
Peringatan lain adalah Anda perlu memastikan bahwa pada akhir eksekusi ProcessRequest keadaan objek adalah seperti yang Anda inginkan untuk permintaan lain untuk menggunakan kembali objek.
sumber
Lebih lanjut untuk jawaban AnthonyWJones ini, jika Anda kembali HTTP handler
true
untukIsReusable
maka Anda harus memastikan bahwa itu sepenuhnya benang-aman.Tidak ada dalam dokumentasi untuk menunjukkan bahwa penangan yang dapat digunakan kembali tidak dapat digunakan kembali secara bersamaan, meskipun implementasi Microsoft saat ini hanya tampaknya menggunakan kembali secara berurutan. Tetapi, setidaknya dalam teori, instance handler tunggal dapat digunakan kembali secara bersamaan oleh beberapa permintaan, jadi Anda tidak boleh bergantung pada data apa pun yang mungkin dimodifikasi oleh utas bersamaan lainnya.
sumber
IsReusable
perlunya keamanan benang ini tampaknya bertentangan dengan respons AnthonyWJones. Seperti yang saya pahami paragraf ketiga (Aplikasi akan instantiate sebanyak ...), instance handler yang dapat digunakan kembali tidak akan digunakan kembali secara bersamaan, tetapi hanya setelah menyelesaikan pemrosesan saat ini. Jika ini benar, maka tidak perlu ada thread aman.Jika Anda tidak menyimpan keadaan apa pun dalam contoh itu (yaitu: Anda tidak memiliki bidang apa pun (alias "variabel kelas")) maka Anda harus aman menggunakannya kembali.
Secara default salah berada di sisi aman.
sumber