asp.net多线程编程

gs8716 gs8716 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我用asp.net web 和window form 都测试过,winform中多了一句System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;线程数目与指定的相同,但是累和结果不对。在asp.net web当中线程数目不与指定数目相同,有时多有时少但都没有达到指定的数目,每次重新计算结果都不一样。

我本人不懂多线程编程的,这些代码是在网上找的
现在问题是:
1、修改代码让其显示结果正确(可以单独做一个循环测试结果是多少,我测试从1累加到1亿是5 000 000 050 000 000)
2、我现在要用多线程批量静态生成,文章数目在3万以上,20万以内,求相关代码,注意效率问题(关于线程编程就可以,分数是另给的100分)

前台代码:

<div><p>累加开始于:<asp:TextBox ID="txtMinValue" runat="server"></asp:TextBox></p>
<p>累加结束于:<asp:TextBox ID="txtMaxValue" runat="server"></asp:TextBox></p>
<p>使用线程数:<asp:TextBox ID="txtThreadNumber" runat="server"></asp:TextBox><asp:Button ID="Button1" runat="server" Text="开始计算" OnClick="Button1_Click" /></p>

<p>累加结果:<asp:TextBox ID="txtOutput" runat="server"></asp:TextBox></p>
<p>信息:</p>
<asp:ListBox ID="lstMessage" runat="server" Height="244px" Width="353px"></asp:ListBox>
</div>

后台代码

protected void Button1_Click(object sender, EventArgs e)
{
txtOutput.Text = "0";
lstMessage.Items.Clear();
int threadNumber = Convert.ToInt32(this.txtThreadNumber.Text);
for (int i = 1; i <= threadNumber; i++)
{
try
{
Thread thread = new Thread(new ThreadStart(Add));
thread.Name = i.ToString();
//thread.Priority = ThreadPriority.Normal;
thread.Start();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{

}
}
}
private void Add()
{
DateTime beginTime = DateTime.Now;
long minValue = long.Parse(txtMinValue.Text);
long maxValue = long.Parse(txtMaxValue.Text);
int threadNumber = Convert.ToInt32(txtThreadNumber.Text);
int thradOrder = Convert.ToInt32(Thread.CurrentThread.Name);
long step = (maxValue - minValue + 1) / threadNumber;
long beginValue = minValue + step*(thradOrder-1);
long result = 0;
long endValue=beginValue+step;
for (long i = beginValue; i < endValue; i++)
{
result += i;
}
lock (this)//线程同步锁
{
long sum = long.Parse(txtOutput.Text);
sum += result;
txtOutput.Text = sum.ToString();
}
DateTime endTime = DateTime.Now;
TimeSpan timeSpan = endTime - beginTime;
string message = "线程" + Thread.CurrentThread.Name + ":" + beginValue.ToString() + "到" + endValue.ToString()
+ ",耗时:" + timeSpan.TotalMilliseconds.ToString() + "毫秒";
this.lstMessage.Items.Add(message);
Response.Write(message + "<br/>");
Thread.CurrentThread.Abort();
}
...全文

相关推荐

评论 11
收藏 已收藏
分享
返回顶部
gs8716
.NET社区 62,271 成员 668,968 内容