社区
C#
帖子详情
c# stringbulider拼接字符串性能问题 太差了~
windstore
2010-01-09 06:17:51
我目前要实现批量插入数据库功能,所以采取的方法是,拼3000条然后插入库。用的stringbuilder,但是性能依然很差。插10万条记录居然要1个小时。怀疑是数据库的问题,然后把与数据库交互的代码去掉,只拼接字符串,依然很慢,才发现是用stringbulider拼接字符串耗时。 我想可能是内存占用过多了。
请问像这种大批量拼接数据库插入字符串的话,应该怎么做?用stringbuilder还慢,实在没辙了。。
...全文
827
57
打赏
收藏
c# stringbulider拼接字符串性能问题 太差了~
我目前要实现批量插入数据库功能,所以采取的方法是,拼3000条然后插入库。用的stringbuilder,但是性能依然很差。插10万条记录居然要1个小时。怀疑是数据库的问题,然后把与数据库交互的代码去掉,只拼接字符串,依然很慢,才发现是用stringbulider拼接字符串耗时。 我想可能是内存占用过多了。 请问像这种大批量拼接数据库插入字符串的话,应该怎么做?用stringbuilder还慢,实在没辙了。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
57 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
绿色夹克衫
2010-01-14
打赏
举报
回复
不知道TextBox tbResult这个参数有什么用,没用最好去掉。
LZ先试试这样是否也慢!
protected void MakeInsertSqlString(SMSEntity entity, TextBox tbResult)
{
sb.Append("Insert into ");
// sb.Append(entity.TableName);
sb.Append(" (linkid,mob,destmob,CONTENT,recvtime) Values ('");
// sb.Append(entity.linkid);
sb.Append("','");
// sb.Append(entity.mob);
sb.Append("','");
// sb.Append(entity.destmob);
sb.Append("','");
// sb.Append(entity.content);
sb.Append("','");
// sb.Append(entity.recvtime);
sb.Append("');");
count++;
}
[Quote=引用 55 楼 windstore 的回复:]
关键的性能问题就是在:MakeInsertSqlString 这个方法了。。
也许只能采用把sql写到.sql文件,然后执行了。。
[/Quote]
绿色夹克衫
2010-01-14
打赏
举报
回复
LZ应该再试试楼上提供的测试stringbulider性能的程序,看是否同样很慢。
也许是机器本身的什么问题!有什么输出操作或者控件Text赋值的地方,也会导致变慢。
别太武断的认为是stringbulider的问题,LS几位测试的数据远远高于10万量级,而执行效率都是秒级的,
应该说stringbulider的效率是很高的。应该逐句找到效率的瓶颈再做优化。
[Quote=引用 54 楼 windstore 的回复:]
谢谢大家的关注。。
其实我测试的时候特意把插入数据库的语句注释掉了,也就是说在没有和数据库交互的情况下就很慢了。但是如果我把用stringbulider拼接sql的方法也注释掉,就很快了。。所以问题还是在用这个stringbulider的问题
[/Quote]
windstore
2010-01-14
打赏
举报
回复
关键的性能问题就是在:MakeInsertSqlString 这个方法了。。
也许只能采用把sql写到.sql文件,然后执行了。。
windstore
2010-01-14
打赏
举报
回复
谢谢大家的关注。。
其实我测试的时候特意把插入数据库的语句注释掉了,也就是说在没有和数据库交互的情况下就很慢了。但是如果我把用stringbulider拼接sql的方法也注释掉,就很快了。。所以问题还是在用这个stringbulider的问题
zhoujk
2010-01-11
打赏
举报
回复
一条一条的插入可能比拼接3000条然后一次性写入的效率要高,String 的操作是很慢的
编程有钱人了
2010-01-11
打赏
举报
回复
这么大的数据操作就不能考虑用StringBuilder对象了
直接用list<string> 都比上面的好
zuoming120
2010-01-11
打赏
举报
回复
[Quote=引用 51 楼 guyehanxinlei 的回复:]
这么大的数据操作就不能考虑用StringBuilder对象了.使用存储过程,批量语句执行等等.
[/Quote]
d
guyehanxinlei
2010-01-11
打赏
举报
回复
这么大的数据操作就不能考虑用StringBuilder对象了.使用存储过程,批量语句执行等等.
mbh0210
2010-01-11
打赏
举报
回复
你这个不是stringbulider性能的问题
而是网数据库插入数据比较慢,
尽量避免多次大开关闭数据库。
polarissky
2010-01-11
打赏
举报
回复
[Quote=引用 31 楼 sdfkfkd 的回复:]
楼主使用
db.ExecuteNonQuery(sb.ToString());
来执行,应该是封装的方法,估计是SQLHELP吧
象这种大批量更新数据库
1、共用一个连接,避免每次打开关闭连接
2、启动事务
3、尽量一次执行多条语句,这点楼主做了
楼主可以再多贴些代码上来
[/Quote]
我赞同这个观点。
共用一个数据连接,构造一条语句,执行一次SQL语句。我也弄个过和楼主类似的东西,最多往数据库写入5000多条记录,耗时不到2秒。
huming_h
2010-01-11
打赏
举报
回复
每当使用StringBuilder 的时候都是
StringBuilder sb=new StringBuilder ();
感觉有点汗。。。。
gbb21
2010-01-11
打赏
举报
回复
[Quote=引用 41 楼 psps001 的回复:]
微软的整个.NET,本身就是一个性能较差的架构,只有等微软如优化了,特别是桌面程序的开发,几乎没有那个企业敢用!!
[/Quote]
哈哈哈哈哈哈哈
huangzhe10
2010-01-10
打赏
举报
回复
StringBuilder比string性能好多了吧!!
skyaspnet
2010-01-10
打赏
举报
回复
private StringBuilder sb = new StringBuilder(SBCAPACITY);
这句改成
private static StringBuilder sb = new StringBuilder(SBCAPACITY);
试一下
skyaspnet
2010-01-10
打赏
举报
回复
基本上可以肯定不是stringbuilder的问题, 测试过20000000条字符连接, 不到十秒,
还是数据库操作部分的代码需要改进, 可以把数据库部分的代码贴出来看一下
flyerwing
2010-01-10
打赏
举报
回复
stringbuilder比string拼节性能好的不只是一点点
可以做程序验证下!!!
内存省的不只是一点点
leafold
2010-01-10
打赏
举报
回复
字符串前面加@""
leafold
2010-01-10
打赏
举报
回复
写到脚本文件MyScript.sql中
如果数据库采用信任链接:
Process.Start("sqlcmd -E -i -S server_name C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt");
否则
Process.Start("sqlcmd -U login_id -P password -i -S server_name C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt");
mjp1234airen4385
2010-01-10
打赏
举报
回复
建议:把你的文件按照数据库需要的格式,写成一个文件。让数据库去处理,还是很快的。
Thr21ough
2010-01-10
打赏
举报
回复
up~
加载更多回复(37)
.NET 面试题 -
C#
基础
http://6.ASP.NET MVC,刚开始接触这个技术的时候我经常不理解他们的名字,我相信许多学http://ASP.NET开发人员开始接触MVC应该也和我一样产生很多为什么,也会误认为认为MVC与http://ASP.NET完全没有关系,是一个全新的Web开发,深入学习后我才知道事实上http://ASP.NET是创建WEB应用的框架而MVC是能够用更好的方法来组织并管理代码的一种更高级架构体系,所以可以称之为http://ASP.NET MVC。功能内聚是最强的内聚,其优点是它的功能明确。
.net软件、网站
性能
优化
不用改代码逻辑的提速方式 计算机里面,数据类型,比如char(1 个字节)、int(4个字节)、float、double。所以无符号整数能用char的就不要用unsign int,能用float的就不要用double; 计算机里面除法比乘法慢,乘法比加减慢,好像减法比加法慢一些(不确定),位运算比加减快; float 或者 double 类型变量能用乘法的就不用除法。比如除以3,可以写成乘以0.3333; 用位运算的都用位运算; 代码逻辑: 提高代码可读性,命名规范,减少无效逻
Java笔记(面向对象)
面向对象编程的主要思想是把构成
问题
的各个事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述一个事物在解决
问题
的过程中经历的步骤和行为。
JVM上篇学习3--内存与垃圾回收
JVM上篇学习3–内存与垃圾回收 执行引擎
String
Table 垃圾回收概述
java程序
This XML file does not appear to have any style information associated with it. The document tree is shown below.博客园_首页代码改变世界uuid:5de59c50-a92f-4447-96ed-ab86451ed183;id=61182014-07-27T11:59:08Zfeed.c...
C#
110,545
社区成员
642,580
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章