我正在处理项目的一部分,它解析Postgres数据库服务器中的日志。 该应用程序是在C sharp Framework 4.0中开发的。从Datagridview行生成统计信息
日志产生和上一个DataGridView显示有以下的列
resultCode Statement Starttime Duration
XT001 select * from PizzaMade 01-02-2012 03:10:14 00:04:10
- 有许多loglines与sameformat。
- 通过解析文本文件从另一个循环填充Datagridview。
我的工作是生成数据可用的统计信息网格的格式如下
Statement Count countpercent Occurs_on
select * from PizzaMade 3 1.42 01/02 at 03pm [00:04:10], 01/02 at 04 [00:01:04]
select id,qty,table from PizzaMade 12 5.12 ...........
所以基本的统计数据反映了以下
- 一)语句执行
- b )计数出现在网格中的次数
- c)计数的百分比,其基本上是totalcounts此语句占据
- d)含有开始时间级联串,持续时间
»该统计信息是作为数据表最初产生,使用for循环
foreach(DataGridViewRow dr in LogGrid.Rows)
{
// search in the Datatable if the statement is present
// if it is then add count , add starttime and duration to the column
// if not then add a newrow
}
»填充DataTable之后,我用一个循环来计算Totalcount
int totalcount = 0;
foreach (DataRow drin StatTable.Rows)
{
totalcount = totalcount + Convert.ToInt32(dr["count"].ToString());
}
»计算计后,有一个循环计算百分比
foreach (DataRow dr in StatTable.Rows)
{
int c = Convert.ToInt32(dr["count"].ToString());
dr["countpercent"] = (c/totalcount)*100;
}
虽然一切看起来正常,整个方法是缓慢的具有大量的行。
- 请问您能否提出改进性能的方法。
感谢 阿文德
你可以尝试为获得总数使用DataTable的计算方法,但我不知道是否会提高性能 – mslliviu 2012-03-27 05:58:38
我测试的计算方法上的100万所记录的样本数据,似乎foreach循环需要545ms并计算方法1850毫秒。即foreach循环更快 – arvind 2012-03-27 06:26:10