弱弱的问个菜鸟的问题, 关于我给的这个字符串连接用stringbuilder能大幅省资源吗?

zpc38368330 2015-05-29 11:14:42
string sqlstr="insert into " + STORE_TABLENAME + " ("
+ STORE_CODE + ","
+ STORE_INDATETIME + ","
+ STORE_NUMBER + ","
+ STORE_PRICE + ","
+ STORE_OPERATOR + ","

+ ") select "
+ CODE+","
+ DATETIME+","
+ INOROUTNUM+","
+ PRICE+","
+ OPERATOR
+" from "+ TABLENAME
+" id="+ id;
这个字符串中,所有的大写都是常量,仅最后的小写id是一个变量
请问是不是vs编译器会将这些常量直接连接起来,而不是像下面这样,用stringbuilder能大幅度的省资源?
for(int i=0;i<100;i++)
stringbuilder.append(i.tostring());
...全文
449 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjq 2015-05-30
  • 打赏
  • 举报
回复
没循环的话,没必要用。
zpc38368330 2015-05-30
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
调用一次不明显 不过用string.format或者string.concat从代码可读性和优雅的方面更好。
谢谢版版,我习惯看这种格式了,如果这次不是后台用户的线程太多,我也不会考虑这种小小的问题,而且我对看这种格式看官了,因为我常犯错,常因vs的智能提示把变量写错了(或许我不适合做程序员~~呵呵)而且在出差错的时间不需要找 ("....{9}",...) 然后再数9个变量的数去找到那个变量看是不是写错了, 求指点迷经~~~
zpc38368330 2015-05-30
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
你这么点字符串拼接算个啥……你要是有个几万这样的字符串+么倒是会因为大量字符串碎片会产生问题…… 另外最讨厌这种命名可以一个字符串写完的,非要用加号加起来的方式,就不能用string.Format的
额~~首先,真心的感谢你关注我的问题 然后~~~ 我只给出了片段的代码,如果我后台有上百上千个线程在运行这段代码,那么是不是会达到你的要求? 再者~~ 用format?像下面这样? string.format("STORE_TABLENAME ({0},{1},{2},{3},{4},.....省略) select from tb2 where ({7},{8},{9}.....{n}", ,A,B,C,E,D,......Z); 这需要很好的数数的基本功的..要不然会对不上号,而且我刚学编程时又不是没这么做过,然后只能感叹,小学老师没多揍我几下,这种格式的10个变量的数都常常数错~~~ 拜托,大神降临的时间都是直接轻轻一挥就能满足我们人类那渺小的愿望的,你这样是做不成大神的
hhhhha123 2015-05-30
  • 打赏
  • 举报
回复
这么点,直接加吧,
  • 打赏
  • 举报
回复
想了下,字段用字典,表名用KeyValue传递更方便,反射反而麻烦
  • 打赏
  • 举报
回复
而且如果你的format真的无可奈何的长,那可以给你个写法建议如下,这样相对来说可以减免掉一部分数数问题
string.Format("{0}{1}{2}{3}",obj0/*0*/,obj1/*1*/,obj2/*2*/,obj3/*3*/)
  • 打赏
  • 举报
回复
就我个人而言,format超过6个就已经可以认为format是不是有问题了,但数数问题你还真小看了码农的能力,我见过在几百行的拼接html中,占位符达30几位的format,而且这个format还是通过复杂的逻辑得到的(这个逻辑会生成不同的html),当初真心给这个代码跪了 而看你这个代码,可以猜测你是写了一个通用的,具有同样表结构的Insert Into功能,对于这种情况,我会更偏向于定义这个方法专用的实体类(这里假定你这么做是合情合理的),然后通过反射来生成这样的一个SQL(你的前后格式都对应的,所以按规则生成SQL还是比较容易的),当然生成过程中是通过StringBuilder来拼接,减少字符串碎片 另外,你举得“上百上千个线程”例子这本身就不恰当,如果这像你这么说,那最大的可能就是:字符串碎片问题还没产生,你的电脑已经因这么多的线程出性能问题了 最后,我很有自知自明,从来不认为自己是大神,最多就是一个比你们多做了几年的码农而已……
zpc38368330 2015-05-30
  • 打赏
  • 举报
回复
我做过网页的前后台开发,这种连加的格式司空见惯豪不稀奇,而且网上几乎所有sql拼接字符串操作的源码及教程都是用连加形式写的,如果用format~~那真要用两手指比着屏幕去一个一个对着读作者的源码了. 我总算想起来C#还有个反汇编的程序~~所以反汇编下看了看,最后按惯例把答案公布下,以供如有相同疑问的读者来看此帖. 反汇编了下看看,前面的常量果然是直接由编译器拼接,然后由contact将那个名为id的变量与编译器拼接的常量作为参数执行, ,也就是说我的这个语句,仅执行了一步 contact(常量,变量), 常量由编译时生成,变量由运行时传参获得. 所以说在这条语句里,还是用连加的方式快 从执行效率上来说大于stringbuilder, format,并且没有多余的内存碎片 (stringbuilder在多字符串连接时不仅仅是为了节省内存碎片,而是为了提升效率,参阅相关文档,format有多个重载,在传递不确定个数的参数时,估计用的也是stringbuilder,应该错不了)
john_QQ:2335298917 2015-05-30
  • 打赏
  • 举报
回复
太短了,用不着
  • 打赏
  • 举报
回复
看量的多少 如果拼得很多(几十上百个),而且也比较长,我用stringbuilding,一般情况下(比如你给的这个例子),直接用string.format或者string+string(而且这种情况下人根本察觉不到你可能缩短的那一丁点效率)
xuzuning 2015-05-30
  • 打赏
  • 举报
回复
既然是 习惯看这种格式了 那也就这样了 不就是拼装一个字符串吗?没有多大开销 只是日后需求稍稍发生变化,就会让你修改的头皮发麻。重新编译发布也是够烦人的了
threenewbee 2015-05-29
  • 打赏
  • 举报
回复
调用一次不明显 不过用string.format或者string.concat从代码可读性和优雅的方面更好。
  • 打赏
  • 举报
回复
你这么点字符串拼接算个啥……你要是有个几万这样的字符串+么倒是会因为大量字符串碎片会产生问题…… 另外最讨厌这种命名可以一个字符串写完的,非要用加号加起来的方式,就不能用string.Format的
zpc38368330 2015-05-29
  • 打赏
  • 举报
回复
问题补充,如果编译器,在编译时能直接连接起字符串,那么如果将字符串连接是用stringbuilder,反倒是降低了效率,所以我来问问这些C#的基本功的问题~~
课程目标:学习Java语言中字符串相关的知识、字符编码常识和正则表达式的使用,并完成案例前导课程:《Java工程师必学系列课程》前4部课程内容:本课程是《Java工程师必学系列课程》的第5部分,主要讲解Java语言中字符串相关知识、字符编码常识和正则表达式的使用。本课程涉及的主要内容可以分为四部分:一、String、StringBuffer和StringBuilder类基本常识、基本原理和使用技巧二、字符编码常识三、Java语言正则表达式的详细语法和使用技巧四、实战案例课程说明:在开发Java程序的过程中,最常用的类莫过于字符串相关的类。可以毫不夸张的说,任何一个Java程序,都离不开对字符串保存和处理。很多学员对字符串的理解只是处于比较粗浅的阶段。殊不知,如果对字符串处理的不好,会影响到软件的运行效率。本课程专门讲解字符串相关的知识,将从字符串的存储方式、底层的运行方式等各方面深入讲解其中的原理和技巧。此外,对字符串进行更高级的处理,又要用到正则表达式的相关知识。正则表达式广泛应用于各种与字符串处理相关的场合。它是一套独立的语言系统,经过几十年的完善和发展,现在已经非常的强大,并且形成了国际标准。各种高级编程语言,都实现了自己的表达式引擎。本课程详细的讲解了Java语言中正则表达式的语法和使用技巧。掌握了正则表达式,对编程水平的提高有非常大的帮助!同时,本课程在最后一部分,安排了非常精彩的、完整的实战案例,通过实战的形式切实帮助学员提高解决具体问题的能力!预期效果:认真学习完本课程,学员可以掌握字符串处理及正则表达式相关的系统知识,并能提高实际的编码水平。环境配置要求:学习本课程需安装JDK1.8或更高版本的JDK,以便程序能正确运行,建议使用IntelliJ IDEA 2019.1.2或更高版本的开发工具。    因有合作协议约束,《穆哥学堂》只提供PDF版本的课件!

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧