我剛讀這great article由文龍東WCF的ChannelFactory緩存。WCF的ChannelFactory緩存
我的問題很簡單,你怎麼能真正證明的ChannelFactory實際上是在調用之間被緩存?我遵循了有關ClientBase構造函數的規則。我們正在利用我們的對象以下重載的構造函數,自ClientBase繼承:
ClientBase(字符串endpointConfigurationName,的EndpointAddress remoteAddress);
在上面提到的文章中指出:
對於這些構造,所有參數 (包括默認的)都在 以下列表:
·的InstanceContext callbackInstance
·串 endpointConfigurationName
周·的EndpointAddress remoteAddress
只要這些三個參數 同當ClientBase是 構建,我們可以有把握地認爲 相同的ChannelFactory都可以使用。 幸運的是,字符串和 EndpointAddress類型是不可變的,即我們可以簡單比較 確定兩個參數是否與 相同。對於InstanceContext,我們可以使用 對象引用進行比較。所述 類型EndpointTrait因此用作MRU高速緩存的密鑰 。
爲了測試我們正在檢查例如哈希碼在ClientBase構造函數中的ChannelFactory緩存理論var testHash = RuntimeHelpers.GetHashCode(base.ChannelFactory);
哈希值是調用這讓我們覺得的ChannelFactory是不實際緩存之間的不同。
有什麼想法?
問候
邁爾斯
當使用object.ReferenceEquals進行身份檢查時,你會得到相同的結果嗎?我有點懷疑以非虛擬方式調用object.GetHashCode,因爲我不知道它的實現細節) –
我遇到了同樣的問題,我實際上使用的構造函數聲明它不會緩存但時機正在顯示,否則。看起來,即使是構造它的狀態它不會緩存嗎?我們怎麼才能真正知道ChannelFactory被緩存了? –