当线程在处理过程中执行了 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() 没有任何影响。
最佳答案
您是否考虑过在每个类型实现 IDisposable 的对象上使用“using”关键字?
我听说使用 MTA 服务器端更好。
我也没有看到你在哪里执行线程同步。
关于c# - 关闭使用 WCF 的线程时的额外步骤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9475051/