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

标签 c# multithreading wcf 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);

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

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/

相关文章:

wcf - 我需要将哪些 WCF 客户端文件 checkin SVN

c# - 使用 Graph API 从 Azure AD 检索所有用户时出现 403 禁止

c# - 如何循环遍历数据集并更改数据 C#

抽象实现接口(interface)上的 C# 协变

c# - C# 和 .net 中的 ExitThread(ExitCode) 和 GetExitCodeThread 等价物是什么?

c++ - QtScript 和线程

java - 线程响应在 weblogic 部署的应用程序中交换

wcf - Azure 计划程序 SSL 证书错误

c# - ShowDialog(owner) 隐藏/不显示,即使我提供所有者 IWin32Window

c# 命名空间已经包含继承类的定义,那么如何添加构造函数