现在我有一个DataSet.Tables[0],里面大约有7万行字符串数据
里面有重复,我要做的就是把每个字符串出现的次数统计出来并删除重复的,把最后的结果显示在另外以个DataGrid中
代码如下:
dt2 = new DataTable();
dt2 = ds.Tables[0].Copy();
int i, j, sameNum;
sameNum = 1;
for (i = 0; i < dt2.Rows.Count - 1; i++)
{
for (j = i + 1; j < dt2.Rows.Count; j++)
{
if (dt2.Rows[i][1].Equals(dt2.Rows[j][1]))
{
sameNum++;
dt2.Rows[j].Delete();
}
}
dt2.Rows[i][2] = sameNum;
sameNum = 1; progressBar1.Value = (i * 100) / dt2.Rows.Count;
}
progressBar1.Value = 0;
dataGrid3.DataSource = dt2;
这样做的后果就是
1.处理速度极慢
2.运行中如果用鼠标点移动一下窗体程序就像死了一样
3.progressBar1不能及时更新请各位高手帮帮我
小弟先谢过各位!
里面有重复,我要做的就是把每个字符串出现的次数统计出来并删除重复的,把最后的结果显示在另外以个DataGrid中
代码如下:
dt2 = new DataTable();
dt2 = ds.Tables[0].Copy();
int i, j, sameNum;
sameNum = 1;
for (i = 0; i < dt2.Rows.Count - 1; i++)
{
for (j = i + 1; j < dt2.Rows.Count; j++)
{
if (dt2.Rows[i][1].Equals(dt2.Rows[j][1]))
{
sameNum++;
dt2.Rows[j].Delete();
}
}
dt2.Rows[i][2] = sameNum;
sameNum = 1; progressBar1.Value = (i * 100) / dt2.Rows.Count;
}
progressBar1.Value = 0;
dataGrid3.DataSource = dt2;
这样做的后果就是
1.处理速度极慢
2.运行中如果用鼠标点移动一下窗体程序就像死了一样
3.progressBar1不能及时更新请各位高手帮帮我
小弟先谢过各位!
解决方案 »
- 高手指点:向数据适配器插入一条新记录后为什么会把原来的记录给覆盖掉?而不是添加上一条新的?
- webbrowser实现自动登录的问题
- .net和com交互问题,已经困扰好长时间,
- 如何实现在指定框架中显示页面?
- GetFullPath 为什么会出错?谁能帮帮忙,先谢了。
- WinForm的DataGrid自动增加行的时候,怎样把里面的null值清空,什么也不显示。怎样实现这个功能?
- 救命呀!Oracle CLob 保存长文本的问题?
- 哈希表转换数组的问题
- 请大家帮我提供一个C#做的数据库软件的系统,演示用,界面好就太好了!在线急等!谢谢大家了!
- 怎样在C#中实现两个sql表之间的INSERT INTO ?
- 直接把*.aspx和bin文件夹下的*.dll拷到另一部机器上,能发布吗?
- 请教高手一个线程问题 在windowsForm中怎样用线程控制进度条显示程序执行进度状态
性能问题已经解决
采用HashTable后原来1万行的数据由44秒缩短到0.18秒,真的太感谢你了
修改后的程序如下:
Hashtable hashTable = new Hashtable();
int i;
string tempStr;
for (i = 0; i < dt2.Rows.Count; i++)
{
tempStr=dt2.Rows[i][1].ToString();
if (hashTable.Contains(tempStr))
hashTable[tempStr] = Int32.Parse(hashTable[tempStr].ToString()) + 1;
else
hashTable.Add(tempStr, 1);
}
progressBar1.Value = 0;
DataTable temDt = new DataTable();
temDt.Columns.Add("a",System.Type.GetType("System.Int32"));
temDt.Columns.Add("b", System.Type.GetType("System.String"));
temDt.Columns.Add("c", System.Type.GetType("System.Int32"));
i = 1;
foreach (DictionaryEntry de in hashTable)
{
DataRow dr = temDt.NewRow();
dr[0] = i;
dr[1] = de.Key;
dr[2] = de.Value;
temDt.Rows.Add(dr);
i++;
}
dataGrid3.DataSource = temDt;