2010-12-15 101 views
1

我工作的一個項目,我們必須包裝,其中包含大量的C#靜態變量爲WCF服務的一些遺留代碼。正如你可以想象的,這對於WCF服務來說是一場噩夢,其請求應該是無狀態的。CreateInstanceFromAndUnwrap速度和優化

沒有主要的重寫,我可以想出的最好的解決方案是在單獨的AppDomain中執行遺留代碼,因此它是線程安全的,我使用CreateInstanceFromAndUnwrap()來實現此目的。

我得到的代碼工作,但問題是,它是相當緩慢的,因爲現在每一個WCF要求它必須重新加載所有的DLL 20+成的AppDomain之前的代碼,甚至開始執行。

我只是想知道有沒有人知道如何優化CreateInstanceFromAndUnwrap()?例如,我是否可以在不加載類的情況下預加載所有程序集,以便每次請求進來時都會重置靜態變量?

乾杯, 奧斯卡

回答

0

短期知道你怎麼能這樣做,你問什麼了,至少我想分享對此事我的想法:

  • ,你可以去會話狀態?這並不能很好地擴展,但如果你可以爲每個會話加載一個AppDomain,你可以得到很好的響應。這取決於您擁有多少個併發用戶。
  • 你可以有作爲的AppDomain池,從而分離創造從服務請求的AppDomain的成本一些其他的盒子?
  • 它是一種確定性的所有靜態怎麼走到一起的?他們可能是懶惰裝載?也許有一些反思或動態方法,你可以設法在請求後擦除靜態。