基本的に LogParser によって実行される SQL クエリであるユーザーからの入力を受け取る ASP.NET アプリケーションを開発しました。(この入力は「sql1」文字列に保持されます。動作しますが、動作が遅くなります。ログ ファイルが 60 MB の場合、メモリ不足の例外を受け取りました。コードを以下で共有しています。これを高速化するためのアイデアがあれば、最初に DataSet に変換せずに、ILogRecordSet オブジェクトを DataGrid に直接挿入する方法はありますか?
LogQuery oLogQuery = new LogQuery();
COMIISW3CInputFormat eventLog = new COMIISW3CInputFormat();
ILogRecord numReq = null;
ILogRecordSet numSet = null;
numSet = oLogQuery.Execute(sql1, eventLog);
DataTable queryTable = new DataTable("Query");
for (int i = 0; i < numSet.getColumnCount(); i++)
{
DataColumn col = new DataColumn();
col.ColumnName = numSet.getColumnName(i);
switch (numSet.getColumnType(i))
{
case 1:
col.DataType = Type.GetType("System.Int32");
break;
case 2:
col.DataType = Type.GetType("System.Double");
break;
case 4:
col.DataType = Type.GetType("System.DateTime");
break;
default:
col.DataType = Type.GetType("System.String");
break;
}
queryTable.Columns.Add(col);
}
while (!numSet.atEnd())
{
numReq = numSet.getRecord();
DataRow row = queryTable.NewRow();
for (int i = 0; i < numSet.getColumnCount(); i++)
row[i] = HttppUtility.HtmlEncode(Convert.ToString(numReq.getValue(i)));
queryTable.Rows.Add(row);
numSet.moveNext();
}
DataSet ds = new DataSet();
ds.Tables.Add(queryTable);
QueryGrid.DataSource = ds;
QueryGrid.DataBind();