Klien Multithreaded dan Handel Konteks

Ketika Anda memiliki klien multithread di mana beberapa utas menggunakan instans handel konteks yang sama, akses ke instans handel konteks diserialisasikan di server secara default. Ini menyelamatkan manajer server dari keharusan menjaga terhadap utas lain dari klien yang sama yang mengubah konteks atau konteks berjalan saat panggilan dikirim. Namun, dalam kasus tertentu serialisasi dapat memengaruhi performa.

Pertimbangkan hal berikut: dua utas klien memanggil panggilan prosedur jarak jauh yang tidak mengubah status konteks (misalnya, panggilan hanya mendapatkan beberapa nilai darinya). Panggilan seperti itu tidak perlu diserialisasikan.

Untuk situasi seperti itu, Windows XP menawarkan model serialisasi mode campuran, di mana setiap metode dapat dinyatakan memiliki akses eksklusif atau bersama ke handel konteks. Lihat context_handle_serialize dan context_handle_noserialize untuk detailnya.

Dalam versi Windows sebelum Windows XP, satu-satunya cara untuk mengizinkan akses bersamaan ke handel konteks adalah dengan memanggil fungsi RpcSsDontSerializeContext untuk memungkinkan beberapa panggilan dikirim pada satu handel konteks. Memanggil fungsi RpcSsDontSerializeContext tidak menonaktifkan serialisasi sepenuhnya; ketika run-down konteks terjadi, rutinitas run-down konteks hanya berjalan ketika semua permintaan klien yang luar biasa telah selesai. Panggilan ke RpcScDontSerializeContext memengaruhi seluruh proses, dan tidak dapat dikembalikan. Menggunakan RpcScDontSerializeContext di Windows XP dan versi yang lebih baru tidak disarankan; itu membuat kode server sangat rumit ketika berurusan dengan andal dengan kondisi ras yang melekat di lingkungan yang sepenuhnya tidak berseri.