解决方案 »
- 请教关于Entity Framework 4.5 中查询缓存的问题!
- c# repeater checkbox点击 子repeater checkbox全选
- 初学C#,请问如何在一个窗体用ToolStripMenuItem_Click控制另一个子窗体的打开关闭,并且焦点不变。
- C#自定义控件效果怎么不能显示出来,如何让它显示在运行结果中
- 什么是indexer?
- 请问 如何修改文本文件的最后一行内容?
- 关于正则表达式中“\b”用法不明白,请指教!
- 探讨Session问题.
- System.Net.Dns.GetHostAddresses(System.Net.Dns.GetHostName())[0].ToString();?
- 我对Control.ControlCollection理解请改正
- C#udp和数据库多线程问题
- 我是新手。。关于Form窗体显示的问题
在 32 位 windows 操作系统中,你自己的线程池大小设置成 200 就行了。在 64位系统下,设置为10000 也就可以了。不过 OutOfMemory 具体是什么造成的,从你的描述中,还是根本不得而知的。线程池是一个队列,比如说你同时注册500个任务,但是当前只有180个可被立即执行,那么自然有320个任务在等待线程池有空闲的线程。在使用线程时,要防止因为线程池有自动的队列就长时间占用线程的问题。一个好的程序,可能向线程池中注册1000个任务,而线程池的大小最多只有20个,如果人家的任务并不长时间占用线程,也非常快地看起来非常像是“并行”地完成。如果你们的程序一直占用着线程在哪里“循环、阻塞”,那么纠结什么 Task 之类的肯定于事无补。一点封装过的技术名词儿并不能解决应用设计问题。另外你所说的 OutofMemory 异常,既然你不能贴出你们自己的代码来调试,那么就应该自己多考虑其它代码的因素,不要什么问题都推在“线程太多”上。滥用线程自然是一个问题,但是不一定你现在就真的找到了自己该找的问题。
我不懂什么叫做“控制住线程的增长”。线程池本来就是用来控制线程增长的,比如说设置为20,那么就是20。没听说过设置为20不能控制线程增长,而改为30反而能够控制线程的增长的。所以我看不懂你说的“控制线程的增长”是什么概念。你们的线程池很可能有严重的设计错误,但是你们的使用线程池的应用程序有设计错误的可能性更大。如果你们只是几个人拼凑个小项目,就别花时间去写什么“线程池”代码了,可以使用 .net 系统线程池。就算是只有几十行的代码,也不一定就能写好。
@Z65443344 ,@sp1234,@diaodiaop, 我是急于解决这个问题才出此下策使用了ThreadPool.SetMaxThreads使软件能够继续应用,知道根本问题没有找到。