【发布时间】:2013-06-03 21:37:29
【问题描述】:
我有大量数据要运行,这需要花费大量时间,所以我认为线程可能会很快为我完成这项工作。
我的工作:从 ASP.NET 前端调用 SQL 存储过程并在那里进行处理,大约需要 30 个小时。
我需要什么:我已将数据分成不同的批次,并为每个批次创建了各自的 SP。现在我要求所有 SP 只需单击一次按钮即可同时运行。
请帮忙!
我使用了下面的代码,但它似乎没有并行运行。
protected void Button3_Click(object sender, EventArgs e)
{
Thread t1 = new Thread(Method1);
Thread t2 = new Thread(Method2);
t1.Start();
t2.Start();
t1.Join();
t2.Join();
}
void Method1()
{
for (int i = 0; i < 10000; i++)
{
Response.Write("hello1"+i);
Response.Write("<br>");
}
}
void Method2()
{
for (int i = 0; i < 10000; i++)
{
Response.Write("hello2" + i);
}
}
【问题讨论】:
-
ASP.Net 管道在单个线程中运行,并且在最终渲染完成后终止。基本上,这意味着页面确实在服务器上保持活动状态,但是页面会针对每个请求进行实例化,用于生成结果 html,然后被释放。在继续之前,请阅读文档以了解此模型。有解决方案(signalR + out-of-iis application),但你应该知道asp.net之前一般是如何工作的。
-
当您调用
t1.Join时,您是在告诉当前线程等到 t1 完成,这就是代码没有并行运行的原因 -
将 20,000 个内容写入 ASP.NET 页面?你不想分页什么的吗?
-
@stuartd:但是当我省略 t1.join 行时,它会给出以下错误尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
-
@MarkSchultheiss:不,我不想打印 10000 行。它只是一个尝试检查异步线程是否正常工作的示例
标签: c# asp.net multithreading