何らかの形式のレポートを作成するサイトがあります。プロセス全体に最大 1 分かかります。パフォーマンスを向上させるために、同期コントローラーを非同期コントローラーに変えることを考えていました。
たくさんのトピックやガイドを読みましたが、コツがつかめていないようです。
現在、最大 15 個の DataTables を持つ DataSet があります。15 個までの DataTable のそれぞれが、異なるクエリによって埋められます。
このページを非同期コントローラーに変換するために、私はConnectionManagerを作成し、各 DataTable に対して 15のgetMethodsを作成し、各 DataTable はモデル内にあります。また、 [Name]Asyncという名前のコントローラーと[Name]Completeという名前のコントローラーを 2つ作成しました。しかし、今私は立ち往生しています。
~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);
}
}
getメソッド
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 Grid 拡張機能を持つビューがあります。