问题流程如下:
1 从数据库中获取到一个记录集ds;
2 对ds中的数据进行处理;
3 将处理完的数据插入到数据库中的表里面.我现在是循环ds,每处理完一条记录,就把处理后的数据插入到数据库表中,然后再处理第二条记录.现在感觉效率太低了,处理2000条数据需要80s,我一开始以为是数据处理过程效率太低,现在做了很多优化,效果不明显,2000条数据还需要70s,和我的投入明显不成正比.我想是不是我每处理一条记录就插入一条记录,在数据库插入数据这一块太浪费时间了!能不能采用类似于批处理的方式,每处理完10条,20条数据,再往数据库中插入这些处理完的数据??我用的数据库为oracle,不知道我的想法可行不?请大家不吝指点,或者有什么更好的办法?大家一起分析!!
1 从数据库中获取到一个记录集ds;
2 对ds中的数据进行处理;
3 将处理完的数据插入到数据库中的表里面.我现在是循环ds,每处理完一条记录,就把处理后的数据插入到数据库表中,然后再处理第二条记录.现在感觉效率太低了,处理2000条数据需要80s,我一开始以为是数据处理过程效率太低,现在做了很多优化,效果不明显,2000条数据还需要70s,和我的投入明显不成正比.我想是不是我每处理一条记录就插入一条记录,在数据库插入数据这一块太浪费时间了!能不能采用类似于批处理的方式,每处理完10条,20条数据,再往数据库中插入这些处理完的数据??我用的数据库为oracle,不知道我的想法可行不?请大家不吝指点,或者有什么更好的办法?大家一起分析!!
解决方案 »
- 如何删除txt文本中的空行
- System.Data.SqlServerCe(windows ce编程)
- 求正则表达式 关于博客采集 满意有加分
- 怎样用winform做像QQ那样的账号密码输入框以及登录状态选择?
- 有没有高手用c#做outlook express的二次开发,做一个plug-in
- 求一js代码 用于在Gridview中显示缩略图 图片较大 要缩小真实大小生成新的小图片
- 关于文件加密技术的探讨
- 20110930
- C#中获得当前日期时间的函数是什么?
- 现在我想检测2项 framwork 和 MDAC2。7 检测没有FramWork 的话 就安装 dotnetfx.exe 安装完的话 就都退出来了, 得再重新启动安装程序
- 如何得到windows的系统控件 busy bar
- 水晶报表走纸的问题,困扰我很久了
1.不要打开一次连接,只传输一条记录。 打开一次连接把数据全部传过去,再插入数据库
2.不要传输好多次,一步到位。 用DataSet一次性将数据带到底层。
其次,如果该表带有主键的话可以考虑使用sqldataadapter的Update方法
我处理数据并不是在取出来的ds基础上修改,而是分析ds中的数据,将有用的数据取出来,再重新构造一个"insert"语句,将数据再插入到另外一个表中!!刚看了一下,去掉insert过程,光分析2000条数据,要不了几秒钟,!!
我想能不能自己用new 创建一个DataTable ,临时存储你修改的数据,然后再把这个DataTable写进数据库,试试~~
public void aaa(DataTable dt)
{
try{
//打开数据库连接 conn.open()
int count = dt.rows.count;//得到dt的count
for(int i=0;i<count;i++)
{
string aa= dt.row[i][0].tostring();//从DT里去相应的数据
…………
insert //执行插入
}
}
catch()
{
//错误处理
}
finlly//不管有无错误 都关闭数据库连接
{
conn.close();
}
}