关闭使用WCF的线程时的额外步骤

本文关键字:线程 WCF | 更新日期: 2023-09-27 18:26:03

当线程在处理过程中执行WCF调用时,我应该做些什么来优雅地关闭线程吗?

我的服务器上似乎出现了内存泄漏,我已经追踪到从我的工作线程进行WCF调用。我用一种简单的方式创建线程,就像这样。。。

var schedule = new Schedule();
var scheduleThread = new Thread(New ParameterizedThreadStart(schedule.Run));
scheduleThread.SetApartmentState(ApartmentState.STA);
scheduleThread.Priority = ThreadPriority.Lowest;
scheduleThread.Start(null);

以及执行有问题的测试代码的代码。。。

public void Run(object param)
{
    var wcf = new TestServer.TestServerClient(...);
    wcf.Open();
    wcf.Ping();
    wcf.Close();
}

在运行了2000次之后,我可以使用内存探查器看到以下类有2000个实例。。。

DispatcherOperationCallback
IntPtr
HwndSubclass
NativeMethods.WndProc

那么,我应该执行一些与从线程使用WCF相关的清理吗?调用GC.Collect()没有影响。

关闭使用WCF的线程时的额外步骤

您是否考虑过对其类型实现IDisposable的每个对象使用"using"关键字?

我听说最好使用MTA服务器端。

我也看不出在哪里执行线程同步。