Saya baru saja menemukan bahwa setiap permintaan dalam aplikasi web ASP.Net mendapat kunci Sesi di awal permintaan, dan kemudian melepaskannya di akhir permintaan!
Jika implikasi ini hilang pada Anda, seperti bagi saya pada awalnya, ini pada dasarnya berarti sebagai berikut:
Kapan saja situs web ASP.Net membutuhkan waktu lama untuk memuat (mungkin karena panggilan basis data yang lambat atau apa pun), dan pengguna memutuskan mereka ingin menavigasi ke halaman yang berbeda karena mereka lelah menunggu, MEREKA TIDAK BISA! Kunci sesi ASP.Net memaksa permintaan halaman baru untuk menunggu sampai permintaan asli selesai dengan lambat memuatnya. Arrrgh.
Kapan saja UpdatePanel memuat dengan lambat, dan pengguna memutuskan untuk menavigasi ke halaman yang berbeda sebelum UpdatePanel selesai memperbarui ... MEREKA TIDAK BISA! Kunci sesi ASP.net memaksa permintaan halaman baru untuk menunggu sampai permintaan asli selesai memuat dengan sangat lambat. Arrrgh Ganda!
Jadi apa saja pilihannya? Sejauh ini saya telah menemukan:
- Menerapkan Custom SessionStateDataStore, yang didukung oleh ASP.Net. Saya belum menemukan terlalu banyak untuk disalin, dan sepertinya beresiko tinggi dan mudah kacau.
- Pantau terus semua permintaan yang sedang berlangsung, dan jika ada permintaan dari pengguna yang sama, batalkan permintaan asli. Agak ekstrim, tapi itu akan berhasil (saya pikir).
- Jangan gunakan Sesi! Ketika saya membutuhkan semacam status untuk pengguna, saya bisa menggunakan Cache saja, dan item kunci pada nama pengguna yang diautentikasi, atau semacamnya. Lagi-lagi sepertinya agak ekstrim.
Saya benar-benar tidak percaya bahwa tim Microsoft ASP.Net akan meninggalkan hambatan kinerja yang sangat besar dalam kerangka kerja pada versi 4.0! Apakah saya kehilangan sesuatu yang jelas? Seberapa sulitkah menggunakan koleksi ThreadSafe untuk Sesi?