- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个在后台运行许多线程的应用程序,这些线程必须向主线程报告,以便它可以更新界面中的表格。过去,工作线程是普通的独立类(名为 Citizen),我使用类似的东西从主线程运行
new Thread(new ThreadStart(citizen.ProcessActions)).Start();
其中 ProcessActions 函数是完成所有后台工作的主要函数。在实际启动线程之前,我会注册事件处理程序,以便 Citizen 线程可以向界面记录/报告一些内容。通常,这些 Citizen 线程有数十个(大约 50 个),而且它们是相当大的类 - 每个都有自己的 HTTP 客户端并浏览网络。
这是管理线程的好方法吗?坦率地说,可能不会。我很确定线程没有正常退出 - 一旦 ProcessActions 函数完成,我删除了事件处理程序,仅此而已 - 随着每个新 Citizen 的启动,内存使用量不断增加。
管理许多(50 多个)线程的最佳方法是什么,您必须经常与之通信?我相信我不必担心 Citizen 变量的线程安全性,因为我不会从其他线程访问它们,但它是自己的线程。
最佳答案
我认为您正在寻找的是线程池。 Here's an MSDN article on them这应该在 C# 4.0 中可用。
想法是创建一个线程池,将其计数设置为某个较大的数字(例如 50),然后开始将线程分配给任务。如果池需要扩展,它可以,但是通过预先声明一个大的数字,您可以避免所有昂贵的线程创建。
“排队”您想要完成的任务,并在线程可用时分配这些任务可能是有益的。
此外,内存泄漏可能很难发现,但我会先测试一个简单的案例:取出所有线程(只需从主线程中一个接一个地运行 Citizen)并让它运行很长时间。如果它仍在泄漏内存,则线程管理不是问题。
关于c# - 使用多线程并与之通信的最有效方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17950262/
我是一名优秀的程序员,十分优秀!