我有一个创建某种形式的报告的站点。整个过程最多需要一分钟。为了提高性能,我正在考虑将同步控制器变成异步控制器。
我阅读了很多主题和指南,但我似乎没有掌握它的窍门。
现在我有一个包含 ~15 个数据表的数据集。大约 15 个数据表中的每一个都由不同的查询填充。
为了将此页面转换为异步控制器,我创建了一个ConnectionManager,为每个 DataTable 创建了 15 个getMethod,每个 DataTable 都在模型中。我还创建了2 个控制器- 一个名为[Name]Async,一个名为[Name]Complete。但是,现在我被困住了。
如何创建 ~15 个线程并分配每个任务以使用 getMethod 填充 DataTable?!
这里是代码的一些部分。
控制器
public class RunTableStatisticsController : AsyncController
{
public void RunTableStatisticsAsync()
{
AsyncManager.OutstandingOperations.Increment(2);
// Create Threads who populate RunTableStatisticsModels DataTables
}
public ViewResult RunTableStatisticsComplete(RunTableStatisticsModel voModel)
{
return View(voModel);
}
}
获取方法
public static DataTable getDataTable1()
{
try
{
DataTable dtTemp= new DataTable();
dtTemp.Columns.Add(new DataColumn("ColumnName1", typeof(string)));
dtTemp.Columns.Add(new DataColumn("ColumnName2", typeof(string)));
string sQuery = "select * from 1";
// Instantiate the Command Object
OleDbCommand dbCommand = new OleDbCommand(sQuery, ..MyConnectionManager.Connection);
dbCommand.CommandType = CommandType.Text;
// Execute the Stored Procedure
OleDbDataReader dr = dbCommand.ExecuteReader();
while (dr.Read())
{
DataRow row = dtTemp.NewRow();
row["ColumnName1"] = dr["ColumnName1"]);
row["ColumnName2"] = dr["ColumnName2"];
dtTemp.Rows.Add(row);
}
return dtTemp;
}
catch (Exception ex)
{
throw new Exception("Error: Reading database.", ex);
}
}
我的模型中确实有通讯员
public DataTable dtTable1{ get; set; }
然后我有一个视图,其中包含将由数据填充的 Telerik 网格扩展。