多執行緒用戶端和內容控制碼

如果您有多執行緒用戶端,其中多個執行緒使用相同的內容控制碼實例,則預設會在伺服器上序列化內容控制碼實例的存取權。 這樣會儲存伺服器管理員,避免來自相同用戶端的另一個執行緒在呼叫分派時變更內容或內容向下執行。 不過,在某些情況下,序列化可能會影響效能。

請考慮下列事項:兩個用戶端執行緒叫用遠端程序呼叫,但不會變更內容 (的狀態,例如,呼叫只會從它) 取得一些值。 這類呼叫不需要序列化。

在這種情況下,Windows XP 會提供混合模式序列化模型,其中每個方法都可以宣告為具有內容控制碼的獨佔或共用存取權。 如需詳細資訊 ,請參閱coNtext_handle_serializecoNtext_handle_noserialize

在 Windows XP 之前的 Windows 版本中,唯一允許平行存取內容控制碼的方法,就是呼叫 RpcSsDontSerializeCoNtext 函式,以允許在單一內容控制碼上分派多個呼叫。 呼叫 RpcSsDontSerializeCoNtext 函式並不會完全停用序列化;當內容執行發生時,內容執行常式只會在所有未完成的用戶端要求完成時執行。 對 RpcScDontSerializeCoNtext的呼叫會影響整個進程,而且無法還原。 不建議在 Windows XP 和更新版本中使用 RpcScDontSerializeCoNtext ;它會讓伺服器程式碼在可靠地處理完全非序列化環境中固有的競爭狀況時非常複雜。