为何C#中对一个类中的多个属性进行多次取值拼接成字符串时特别慢

诚实可爱的小郎君 2018-01-05 03:29:12
我有一个类Class
Class类里面有n个属性分别是n1,n2,n3.... ...
然后我针对这个Class new 了 m 个实例分别是m1,m2,m3... ...
问题是:某一个时刻我需要将这m个实例中每个实例的n1--nn的属性读一下然后拼接成一个字符串,我在读取的时候有一个问题是会非常非常的慢,Class的属性中没有object类型的,应该不存在装箱和拆箱操作,当m的个数为4500的时候读取的速度是9s左右,当m的值继续增大的时候速度直线下降,请问一下大家这个问题该如何解决
...全文
494 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 2018-01-05
  • 打赏
  • 举报
回复
楼上已经回答了。使用stringbuilder。 并且 string的性质,楼上也说了。 每次你string+string的操作,都会产生新的string来存储。 对于字符串频繁改动的使用stringbuilder
sakuragilyb 2018-01-05
  • 打赏
  • 举报
回复
用stringbuilder吧
xuzuning 2018-01-05
  • 打赏
  • 举报
回复
引用 4 楼 mx526874883 的回复:
其实 n的数量很少,不到十个,就没有那样做
那就是重写 ToString 了 那你 m 个实例数据合并又是怎么做的? 不是 string.Join 吗?
3819 2018-01-05
  • 打赏
  • 举报
回复
string是不可变的,所有对string的操作都将产生新的string对象,一两个影响不大。。
Anonymous477 2018-01-05
  • 打赏
  • 举报
回复
string是不可变的,所有对string的操作都将产生新的string对象,一两个影响不大。。
  • 打赏
  • 举报
回复
引用 2 楼 xuzuning 的回复:
很难想象你的应用场景 为何属性要定义成 n1,n2,n3.... ...,而不是一个集合呢? 单独命名的属性你是如何遍历的?用反射还是重写 ToString 方法?前者肯定是很慢的,后者快些,但代码要写死人 你或许可以通过内存映射文件来完成数据的提取
其实 n的数量很少,不到十个,就没有那样做
  • 打赏
  • 举报
回复
引用 1 楼 StratosBlue 的回复:
直接用加号拼接的?那肯定会很慢。。。用StringBuilder来构建字符串;
我是直接使用的+号来拼接的,刚刚试了一下你的方法,速度提升到几乎是立即就可以完成的地步
xuzuning 2018-01-05
  • 打赏
  • 举报
回复
很难想象你的应用场景 为何属性要定义成 n1,n2,n3.... ...,而不是一个集合呢? 单独命名的属性你是如何遍历的?用反射还是重写 ToString 方法?前者肯定是很慢的,后者快些,但代码要写死人 你或许可以通过内存映射文件来完成数据的提取
Anonymous477 2018-01-05
  • 打赏
  • 举报
回复
直接用加号拼接的?那肯定会很慢。。。用StringBuilder来构建字符串;

110,533

社区成员

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

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

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