我有一個組件X代理客戶端和服務器。客戶端和服務器連接都是WCF。問題是,在高負載下,WCF似乎不會發佈會話或某種類型的東西。我在這些跡象後得出了這樣的結論:WCF卸載將不會釋放內存,直到加載結束 - 可能會話
1)在負載情況下,內存不斷增長。
2)內存分析器AQTime顯示沒有泄漏。在加載期間主動調用垃圾收集器(使用GC.Collect和GC.WaitForPendingFinalizers)會釋放一些內存,但仍在增長。但是在負載關閉後,所有的內存都被釋放。
3)後,我改變了通信框架從WCF到ZeroMQ該組件和他連接到內存中的一個之間作用更好 - 它幾乎不會增長。
組件的描述:
它使用net.tcp綁定連接到分量Y,並用的net.tcp偵聽爲好。綁定定義是:
<binding
name="netTcpBinding_Server"
maxReceivedMessageSize="1073741824"
maxBufferSize="1073741824"
transferMode="Buffered">
<security mode="None" />
<readerQuotas maxArrayLength="1073741824" maxStringContentLength="1073741824" />
</binding>
<binding name="netTcpBinding_Client"
maxReceivedMessageSize="1073741824"
openTimeout="00.00:00:30"
closeTimeout="00.00:00:30"
receiveTimeout="Infinite">
<security mode="None" />
<readerQuotas maxArrayLength="1073741824" maxStringContentLength="1073741824" />
</binding>
行爲:
<behaviors>
<serviceBehaviors>
<behavior name="ServerServiceBehavior">
<serviceDebug includeExceptionDetailInFaults="true" />
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
<serviceThrottling maxConcurrentSessions="64" maxConcurrentCalls="128" maxConcurrentInstances="192" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="ServerEndPointBehavior">
<dataContractSerializer maxItemsInObjectGraph="6553600"/>
<protobuf/>
</behavior>
<behavior name="ClinetEndPointBehavior">
<dataContractSerializer maxItemsInObjectGraph="6553600"/>
<protobuf/>
</behavior>
</endpointBehaviors>
</behaviors>
<extensions>
<behaviorExtensions>
<add name="protobuf" type="ProtoBuf.ServiceModel.ProtoBehaviorExtension, protobuf-net, Version=1.0.0.280, Culture=neutral, PublicKeyToken=257b51d87d2e4d67"/>
</behaviorExtensions>
</extensions>
如果有人想要更多的細節,我會很樂意給盡我所能。請問有人能告訴我這是否是一種熟悉的行爲,以及我能否做點什麼?
在此先感謝!
馬克西姆