前几天有人问我多线程方面的东西,写了怎么久的程序,我一直用(.net 1.1)在asp.net一直没用过多线程的代码。
说实话,我一直不知道多线程在asp.net能做什么方面的应用。我现在程序都是 get post 提交参数,代码中向数据库或向网页请求,产生结果返回给调用者或页面呈现,就这样我实现想不到哪里需要用多线程。在我看来客户端请求的东西,用单线程已完全行了,多线程能增加什么呢,或哪里一定要用它呢。
说实话,我一直不知道多线程在asp.net能做什么方面的应用。我现在程序都是 get post 提交参数,代码中向数据库或向网页请求,产生结果返回给调用者或页面呈现,就这样我实现想不到哪里需要用多线程。在我看来客户端请求的东西,用单线程已完全行了,多线程能增加什么呢,或哪里一定要用它呢。
解决方案 »
- asp上传ftp服务器,页面中图片都是叉
- 用OleDbDataAdapter读取金山Office修改过的Excel文件时,取不到数据,怎么回事?
- asp.net 调用网络打印机
- 真心求教,VS问题
- 有谁知道BBSMAX的URL重写是怎么实现的?
- 请教,在web.config 中设置数据库连接字符串怎么加密呀 ??
- Iframe框架的滚动条颜色怎么设置呢,谁知道吗?
- 一个关于视图状态的问题
- 如何把aspx页面动态生成静态页面呀 好想大网站都是这么做的!
- label中时间显示问题
- viewstate 产生了这么大段代码,是不是影响速度,如何处理?高分或者付费解决
- 请问一个AlphaImageLoader来显示本地图片的问题
多线程实际上是一个假象,就是说,因为CPU的时间总是有限的,那么CPU需要频繁地切换,在某个时间执行某个线程的任务。这种情况,如果用的不好,反而增加了CPU的负担,降低了系统性能。
直接创建Thread对象,并且调用它的Start方法
使用ThreadPool.QueueUserWorkItem方法
使用BackgroundWorkerstatic void Main(string[] args)
{
Thread thread = new Thread(new ParameterizedThreadStart(SomeMethod));
thread.Start(100);
ThreadPool.QueueUserWorkItem(new WaitCallback(SomeMethod), 100);
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerAsync();
Console.Read();
}
static void worker_DoWork(object sender, DoWorkEventArgs e)
{
SomeMethod(100);
}
static void SomeMethod(object max)
{
int length = (int)max;
for (int i = 0; i < length; i++)
{
Console.WriteLine(i.ToString());
}
}多线程总结
但是你的程序没必要用什么多线程多线程是为了增加CPU的利用率,避免等待慢速操作造成的CPU闲置
还有可能是为了方便控制
除这两点之外没啥别的用处了
滥用只会增加资源占用~
这往往造成了CPU资源的闲置浪费,多线程运行就可以避免这种情况
当某个线程在等待时,总有其他的线程在运行~
虽然.net在web里也可以用多线程,但设计不好反而会降低性能,严重的会死机
* 同时给1000个人发邮件
* 把100万条数据导出到excel文件
* 定时清理服务器上的临时文件
...