【发布时间】:2014-12-06 15:21:37
【问题描述】:
我已经阅读了一些关于 ASP.NET 中的多线程的文章
但我不明白什么是最好的...Task、Thread、ThreadPool 或 Delegate.BeginInvoke。 我在页面上有 Excel 上传按钮, excel上传完成后,应验证数据, 并应显示验证进度, 因为为什么验证过程在新线程中运行。
这里是代码示例
protected void btnValidation_OnClick(object sender, EventArgs e)
{
var excelData = Session["UploadedExcelData"];
var validator = new DataValidator(excelData);
validator.Start();
}
public class DataValidator
{
private readonly IList<IDictionay<String, Object>> excelData;
public DataValidator(IList<IDictionay<String, Object>> excelData)
{
this.excelData = excelData;
}
public void Start()
{
var t = new Thread(ValidateData);
t.Start();
}
private void ValidateData()
{
//data validation code
}
}
真正的问题是生产服务器上的内存使用, 如果验证过程在没有线程的情况下运行,则内存使用量约为 12GB, 但如果验证过程在新线程或新任务中运行,则内存使用量约为 25GB
附言 我知道...使用 ThreadPool 或 Delegate.BeginInvoke 进行多线程处理是个坏主意,因为 ASP.NET Page.Requests 使用 ThreadPool
【问题讨论】:
标签: asp.net multithreading memory webforms