我們有一個簡單的wpf應用程序,它連接到本地機器上運行的服務。我們使用命名管道進行連接,然後註冊回調,以便稍後服務可以向客戶端發送更新。在命名管道上使用WCF GetCallbackChannel發生內存泄漏
的問題是,有回調的每次通話,我們得到的內存在客戶端應用程序建立。
這是客戶端連接到服務的方式。
const string url = "net.pipe://localhost/radal";
_channelFactory = new DuplexChannelFactory<IRadalService>(this, new NetNamedPipeBinding(),url);
,然後在一個線程池線程我們循環執行以下操作直到我們連接
var service = _channelFactory.CreateChannel();
service.Register();
service.Register看起來像這樣在服務器端
public void Register()
{
_callback = OperationContext.Current.GetCallbackChannel<IRadalCallback>();
OperationContext.Current.Channel.Faulted += (sender, args) => Dispose();
OperationContext.Current.Channel.Closed += (sender, args) => Dispose();
}
此回調存儲當新數據到達時,我們在服務器端調用以下內容。
void Sensors_OnSensorReading(object sender, SensorReadingEventArgs e)
{
_callback.OnReadingReceived(e.SensorId, e.Count);
}
其中參數是int和double。在客戶端上,處理如下。
public void OnReadingReceived(int sensorId, double count)
{
_events.Publish(new SensorReadingEvent(sensorId, count));
}
但是我們發現註釋掉_event.Publish ...對內存使用沒有任何影響。有沒有人看到這可能是內存泄漏的任何邏輯原因。我們已經使用一個分析器來跟蹤這個問題,但是找不到構建什麼類型的對象。