{
using (StreamWriter sw = new StreamWriter(@"C:\multThread.txt"))
{
sw.WriteLine(DateTime.Now.ToString());
}
lbl.Text = DateTime.Now.ToString() + " " + Session.SessionID.ToString()+" "+
System.Diagnostics.Process.GetCurrentProcess().Threads.Count;
}
在sw.WriteLine设断点。在3个不同浏览器点击按钮。进入会有1个因进程正在使用,而无法访问。
我是故意这样做的,为了测试一下asp.net的多线程控制?
那,asp.net是如和控制多用户访问的呢?若一个用户在占用文件,而另一个要访问,是应该等待?它是否开启另外的线程?
若并发2000用户,开启2000个线程吗?那不久崩溃了吗?谁懂得其中道理,不惜赐教。
16 个解决方案
#1
每天回帖即可获得10分可用分!
#2
若在using中加入Thread.sleep(10000)
那么在10秒内若有其它用户访问,会保存,刚刚试过。谁能解释一下原理。
那么在10秒内若有其它用户访问,会保存,刚刚试过。谁能解释一下原理。
#3
StreamWriter sw = new StreamWriter(@"C:\multThread.txt");
作为一个全局变量。
不要close
在服务器关闭事件中写close
作为一个全局变量。
不要close
在服务器关闭事件中写close
#4
如果你的并发不会很多的话,可以用lock住..
等代码执行完毕了,在进行解锁!
如果线程并发高,使用以下这个方法:
等代码执行完毕了,在进行解锁!
如果线程并发高,使用以下这个方法:
private int inTimer = 0;
private void timersTimer_Elapsed(object source)
{
if (Interlocked.Exchange(ref inTimer, 1) == 0)
{
//你要执行的代码
// 在代码最后加上++
//线程原子操作,保证线程安全
Interlocked.Exchange(ref inTimer, 0);
}
}
#5
你这是故意测试asp.net多线程访问?你这是故意测试多线程写同一个文件!(而Windows操作系统根本不允许进行这种操作)
因此,问题出在你做的所谓测试。如果你用一个最简单的console试试多线程写同一个文件,肯定也一样发生冲突!难道你因此就怀疑console下能不能多线程操作?
#6
3,4楼说的确实是对的。那超时怎么设置?
#7
sp1234,不是的。我是想看看asp,net多线程的机制。这样做确实不妥,但是可以明显看出asp.net是对用户请求,在并发时,是否采用多线程,。结论,当然是的。但是它真的是在并发时,每个请求开一个线程吗?
#8
其实你应该注意这个问题背后的所显现的深层次问题。你对多线程的实践经验实在是太少了,这就造成了自己给自己设计出了根本不可能有正确结果的“陷阱”。
#9
你的
sw.WriteLine(DateTime.Now.ToString());
运行多长时间?10秒钟吗?
#10
呵呵 不惜请教
#11
System.Threading.Thread.Sleep(10000);
lbl.Text = DateTime.Now.ToString() + " " + Session.SessionID.ToString()+" 线程数:"+
System.Diagnostics.Process.GetCurrentProcess().Threads.Count;
这样测试,能看出,在10秒内,出现多个请求,会出现。18个线程,而一个请求是16个,2个是17个
lbl.Text = DateTime.Now.ToString() + " " + Session.SessionID.ToString()+" 线程数:"+
System.Diagnostics.Process.GetCurrentProcess().Threads.Count;
这样测试,能看出,在10秒内,出现多个请求,会出现。18个线程,而一个请求是16个,2个是17个
#12
那也就是说,在asp.net中若并发2000个的话,开2000个线程。我以前测试过,系统开2000个线程,会内存溢出。那真的是大网站的话,怎么办呢?
#13
并发2000个线程对1个文件进行写入操作吗?
我感觉这样的情况一概很少见吧。学习ing。。。
我感觉这样的情况一概很少见吧。学习ing。。。
#14
顶顶顶顶顶顶顶
#15
web天生就是多线程。不明白要测试什么?
#16
使用单态设计模式
#1
每天回帖即可获得10分可用分!
#2
若在using中加入Thread.sleep(10000)
那么在10秒内若有其它用户访问,会保存,刚刚试过。谁能解释一下原理。
那么在10秒内若有其它用户访问,会保存,刚刚试过。谁能解释一下原理。
#3
StreamWriter sw = new StreamWriter(@"C:\multThread.txt");
作为一个全局变量。
不要close
在服务器关闭事件中写close
作为一个全局变量。
不要close
在服务器关闭事件中写close
#4
如果你的并发不会很多的话,可以用lock住..
等代码执行完毕了,在进行解锁!
如果线程并发高,使用以下这个方法:
等代码执行完毕了,在进行解锁!
如果线程并发高,使用以下这个方法:
private int inTimer = 0;
private void timersTimer_Elapsed(object source)
{
if (Interlocked.Exchange(ref inTimer, 1) == 0)
{
//你要执行的代码
// 在代码最后加上++
//线程原子操作,保证线程安全
Interlocked.Exchange(ref inTimer, 0);
}
}
#5
你这是故意测试asp.net多线程访问?你这是故意测试多线程写同一个文件!(而Windows操作系统根本不允许进行这种操作)
因此,问题出在你做的所谓测试。如果你用一个最简单的console试试多线程写同一个文件,肯定也一样发生冲突!难道你因此就怀疑console下能不能多线程操作?
#6
3,4楼说的确实是对的。那超时怎么设置?
#7
sp1234,不是的。我是想看看asp,net多线程的机制。这样做确实不妥,但是可以明显看出asp.net是对用户请求,在并发时,是否采用多线程,。结论,当然是的。但是它真的是在并发时,每个请求开一个线程吗?
#8
其实你应该注意这个问题背后的所显现的深层次问题。你对多线程的实践经验实在是太少了,这就造成了自己给自己设计出了根本不可能有正确结果的“陷阱”。
#9
你的
sw.WriteLine(DateTime.Now.ToString());
运行多长时间?10秒钟吗?
#10
呵呵 不惜请教
#11
System.Threading.Thread.Sleep(10000);
lbl.Text = DateTime.Now.ToString() + " " + Session.SessionID.ToString()+" 线程数:"+
System.Diagnostics.Process.GetCurrentProcess().Threads.Count;
这样测试,能看出,在10秒内,出现多个请求,会出现。18个线程,而一个请求是16个,2个是17个
lbl.Text = DateTime.Now.ToString() + " " + Session.SessionID.ToString()+" 线程数:"+
System.Diagnostics.Process.GetCurrentProcess().Threads.Count;
这样测试,能看出,在10秒内,出现多个请求,会出现。18个线程,而一个请求是16个,2个是17个
#12
那也就是说,在asp.net中若并发2000个的话,开2000个线程。我以前测试过,系统开2000个线程,会内存溢出。那真的是大网站的话,怎么办呢?
#13
并发2000个线程对1个文件进行写入操作吗?
我感觉这样的情况一概很少见吧。学习ing。。。
我感觉这样的情况一概很少见吧。学习ing。。。
#14
顶顶顶顶顶顶顶
#15
web天生就是多线程。不明白要测试什么?
#16
使用单态设计模式