由於歷史原因,我有一些WSE 3.0 Web服務,我無法在服務器端升級到WCF(這也是相當大的工作量)。避免使用WSE 3.0 MTOM服務進行GC抖動
這些Web服務正用於從客戶端到服務器的文件傳輸,使用MTOM編碼。由於兼容性的原因,這在短期內也不能改變。其次,它們被Java和.NET調用,因此需要跨平臺,因此需要MTOM。
工作原理是,一個「上載」的WebMethod的客戶端調用,一次發送了一個數據塊,因爲正在傳送的文件可能是大小千兆字節。
然而,由於不能夠在調用的WebMethod之前控制所述堆的部分,我無法控制的Web服務的存儲器使用模式。
我遇到的問題是文件大小從50MB左右開始,性能因爲GC而絕對被終止,因爲WSE 3.0似乎在新的byte []數組中緩存從客戶端接收到的每個塊,並且在我們完成50MB的時候,我們花20-30%的時間來完成GC。
我玩過的各種塊大小,從16k到2MB,結果沒有太大的差別。
小塊兒是由參與往返傳遞的延遲死亡,更大的塊只是推遲放緩,直到GC踢。
什麼好主意,在削減由WSE創建的垃圾?我能否以某種方式插入流水線,並評估哪些可以訪問客戶端的請求流並將其流式傳輸到WebMethod?
我知道,這是可能的「流」的反應使用WSE(雖然很醜陋的)的客戶端,但這個問題是來自客戶端的請求。
此外,在IIS7使用經典模式是不好的:) – 2010-05-21 10:59:22