多線程客戶端和內容句柄
當您有多個線程使用相同內容句柄實例的多線程時,預設會在伺服器上串行化對內容句柄實例的存取。 這樣會儲存伺服器管理員,避免來自相同用戶端的另一個線程變更內容或分派呼叫時執行的內容。 不過,在某些情況下,串行化可能會影響效能。
請考慮下列事項:兩個用戶端線程會叫用不會變更內容狀態的遠端過程調用(例如,呼叫只會從中取得一些值)。 這類呼叫不需要串行化。
在這種情況下,Windows XP 提供混合模式串行化模型,其中每個方法都可以宣告為具有內容句柄的獨佔或共用存取權。 如需詳細資訊,請參閱 context_handle_serialize 和 context_handle_noserialize。
在 Windows XP 之前的 Windows 版本中,允許並行存取內容句柄的唯一方法,就是呼叫 rpcSsDontSerializeContext 函式,以允許在單一內容句柄上分派多個呼叫。 呼叫 RpcSsDontSerializeContext 函式並不會完全停用串行化;當發生內容執行時,內容執行例程只會在所有未完成的用戶端要求完成時執行。 呼叫 RpcScDontSerializeContext 會影響整個程式,而且無法還原。 不建議在 Windows XP 和更新版本中使用 RpcScDontSerializeContext;當可靠地處理完全非串行化環境中固有的競爭條件時,它會使伺服器程式代碼變得非常複雜。