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

Phi*_*ght 5 c# wcf multithreading memory-leaks

在处理过程中执行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);
Run Code Online (Sandbox Code Playgroud)

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

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

...运行2000次后,我可以看到使用内存分析器,有以下类的2000个实例...

DispatcherOperationCallback
IntPtr
HwndSubclass
NativeMethods.WndProc
Run Code Online (Sandbox Code Playgroud)

那么,我是否应该执行一些与从线程中使用WCF相关的清理工作?调用GC.Collect()没有任何影响.

Gre*_*egC 2

您是否考虑过在每个类型实现 IDisposable 的对象上使用“using”关键字?

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

我也没有看到你在哪里执行线程同步。