2

基本的に 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();
4

0 に答える 0