当前位置:编程学习 > C#/ASP.NET >>

公布微软.net StringBuilder方法一个极其SB的BUG,恼火之极!!

我要做一个应用程序,对一个篇幅较大的众多字符串进行替换操作

例如,每行100个数字0-9,10000行,可以有相同值的行,绝大多不相同

我起先用 string=string.replace("old","new") 去进行操作,old是旧参数,new是新参数

比如需要修改替换第 31行 50行 1020行.。。。。这些数据,那就需要把这些做成数组对吧

我这么做 string s[,]=new string[n,2];
反正就是循环查找替换 s 保存了旧值和新值



替换的是一塌糊涂,替换的结果 20%-30%被替换,其他仍旧不动,我想了一下,可能是 string 太大,

string 这种替换,每次产生一个新对象,可能吃不消,对象太多。


于是我改用了 stringbuilder.Replace("","")方法
比如有一行 2114124123123129313112 我随便写的数字,我要替换为 00000001010023123129313102
大家注意,前面好多都换了,倒数第2个也换了
SB的微软,竟然替换结果是00000001010023123129313112

开始以为循环速度快,CPU出错,我单步调试好多次,都这个鬼样!!!

他为了提高Replace效率肯定是抽样对比,NND,抽样你找到样本,你全换啊,他不,就像一个粗心的人,看前面不一样,认真换,后面差不多,就全搞上去!!

让我花了1周时间去找问题根源!!

大家可以做个实例模拟出效果,你说气人不?
字符串操作是程序的根本操作,抽样对比,也不能这么整啊,出了问题我都是习惯性找自己原因,害我熬多少夜去琢磨


会IL的朋友,帮忙分析一下IL代码,从汇编角度找到根源

越用.net越觉得,就是糊弄人的产品,.net就是噱头,看java搞的火,自己整一套
越往深处用,越不顺手,问题越多,缺陷越多,还到处搞,和这个合作和那个合作,各大厂商还群起响应,AutoCAD,delphi还都从深层次支持,还有公司用它开发网游,不知道怎么开发出来的下去!!!

我用的 3.5 vs2008,都 从1.0更新到 3.5 这种问题还没更新出来?


难道真的只能拿他当花瓶用,开发开发小网站? --------------------编程问答-------------------- 沙发,我靠一切BUG! --------------------编程问答-------------------- LZ自己不会用,在上面瞎叫唤~ --------------------编程问答-------------------- mark,有空试试,先不发表评论。 --------------------编程问答-------------------- 我竟然搞不懂状况 --------------------编程问答-------------------- 我也感觉应该不会有问题吧。
每行一百个数字的字符串也不是很大啊。
像下面的代码就有100个数字了。在我这里没有问题啊

 StringBuilder sb = new StringBuilder("43453532211412412312312931311242424242424242424245345574721141241231231293131122334534233453534535353542342424242424242423211412412312312931311242432425353535634687959452451");

 sb.Replace("2114124123123129313112", "00000001010023123129313102");


而且应该和循环次数没有关系的。

--------------------编程问答-------------------- mark --------------------编程问答-------------------- 自己看你的代码把. --------------------编程问答-------------------- 我不信会有这么S B的BUG.。。 --------------------编程问答-------------------- 同意2楼
楼主还是好好看看MSDN吧 --------------------编程问答-------------------- 我这么做 string s[,]=new string[n,2]; 
反正就是循环查找替换 s 保存了旧值和新值 

为什么要用2维数组?这里1维的就可以满足你后面提到的按行替换的功能

string 这种替换,每次产生一个新对象,可能吃不消,对象太多。 (没这种说法吧,在内存紧张的时候GC会回收的)

你最后说的问题,建议你自己还是看看自己的代码,看是否有写错的地方。

别上来就说有BUG,这玩意又不是被你一个人用,.NET 3.5是早都出来了,如果有问题早被发现了。
--------------------编程问答-------------------- 没有试验, 不知道,

不过楼主说的:

越往深处用,越不顺手,问题越多,缺陷越多

有这个问题, 况且不止是 .net 是这样的.
越往高处走, 陪你的人也越少, 需要你来折中. --------------------编程问答-------------------- 没看明白。建议整理一段小代码方便其他人来验证问题。

我只看到有个有在叫。 --------------------编程问答-------------------- 真要有这样的BUG,估计MS也到不了现在这个水平吧 --------------------编程问答-------------------- 不知道lz的源码和数据到底是怎么组织的,只能猜测是不是出现了重复替换的问题


            StringBuilder SB = new StringBuilder("211412412312312931311212341201232321");
            SB = SB.Replace("2114124123123129313112", "00000001010023123129313102");
            SB = SB.Replace("2931310212341201232321", "29313112012031012011031022");

            MessageBox.Show  (SB.ToString().Substring(0, 26));  


结果是00000001010023123129313112 --------------------编程问答-------------------- UP, 有空试试. --------------------编程问答-------------------- 我怎么就没发现你这样的问题呢???!!! --------------------编程问答-------------------- 沙发 --------------------编程问答-------------------- 14楼的疑问有道理的,看看是不是重复了吧。 --------------------编程问答-------------------- 不明真相群众来围观下~ --------------------编程问答-------------------- 循环速度快,CPU出错囧.........
摸了这么多年电脑头一次听到这个说法..
至于小网站...不知道LZ觉得M$公司的网站算不算"小"网站. --------------------编程问答-------------------- 在计算机执行的程序,会有异常,但绝不会出现逻辑错误
字符串替换是一个简单的功能,其本身不包含逻辑
所以我觉得还是楼主自己的逻辑出问题的可能性比较大~ --------------------编程问答-------------------- 把你出现问题,发现BUG的测试代码贴上来,我怀疑你的代码有问题,按照你说的替换,我写的替换过程执行一切正常。 --------------------编程问答--------------------
引用楼主 bbwolfcool 的回复:
替换的是一塌糊涂,替换的结果 20%-30%被替换,其他仍旧不动,我想了一下,可能是 string 太大, 

string 这种替换,每次产生一个新对象,可能吃不消,对象太多。 

这时候你就该想想是否你的逻辑有问题了!
如果真的是因为string 太大,
结果可能是运算结果很久才出来,
顶多是报异常,
绝不会出现逻辑错误! --------------------编程问答-------------------- 看样子 楼主脑子中BUG 了 --------------------编程问答--------------------
引用 19 楼 viena 的回复:
不明真相群众来围观下~


一小撮不明真相群众来围观~ --------------------编程问答-------------------- 如果说StringBuilder可能出现低级错误,我还有百分之零点一相信;
如果说string出现低级错误,我百分之一万不信! --------------------编程问答-------------------- lz大脑比cpu还好用 --------------------编程问答-------------------- 估计你的代码有问题 --------------------编程问答-------------------- //string 这种替换,每次产生一个新对象,可能吃不消,对象太多。
//开始以为循环速度快,CPU出错
我感觉楼主的思维方式不适合在串行计算的计算机上编程呃
不知道模拟生物大脑的神经网络啥的超级并行计算机啥时候能发明出来~ --------------------编程问答-------------------- 路过,觉得不大可能 --------------------编程问答-------------------- 楼主,你还是看看你自己的代码吧,把代码贴出来。如果这么简单的东西都会有这么大的Bug。微软就不用混了!

你说的,其实我不太明白,我不知道你是什么替换规则,再说了,
如果你是循环替换的话,可能原来不会被替换的字符串,因为前面的几次的替换,而变成某一次可以替换的字符串,这是常有,并且可能的事 --------------------编程问答-------------------- 动不动就能发现微软的Bug,那你可以去微软的测试部门混了 --------------------编程问答-------------------- mark...
有空尝试一下,不过估计ms是不会犯这样低级错误的吧 --------------------编程问答-------------------- 一个字,楼主脑残 --------------------编程问答-------------------- 只能说楼主很幽默,像个锤子一样! --------------------编程问答-------------------- joke? --------------------编程问答-------------------- 大多数时候,大多数人,都会认为自己没错,错的是别人。 --------------------编程问答-------------------- 貌似今天不是愚人节啊?
真会开玩笑。 --------------------编程问答-------------------- 见到太多自己代码有错误、逻辑有错误就说microsoft/sun有bug的了,这样的bug微软会出?岂不是成笑柄了?
实际上是你成为笑柄。 --------------------编程问答-------------------- mark --------------------编程问答-------------------- joke? --------------------编程问答-------------------- 贴个代码和数据样本,大家一起分析分析 --------------------编程问答--------------------

笑而不语 --------------------编程问答-------------------- 标题党!

有胆贴源码看看! --------------------编程问答-------------------- ....楼主,上代码吧~ --------------------编程问答-------------------- 赶紧上测试代码和数据 --------------------编程问答-------------------- 我以为楼主能让我振奋一下,又失望了

如果这么简单一个问题微软都搞出bug,还能混到现在?

我也怀疑你是不是重复替换了 --------------------编程问答--------------------
引用 25 楼 sandy945 的回复:
引用 19 楼 viena 的回复:
不明真相群众来围观下~


一小撮不明真相群众来围观~

围观!

想看下代码··· --------------------编程问答-------------------- 多匹配替换不应该分多步来完成吧
可以用正则表达式的替换,需替换的关键字用|串起来
用传入一个委托的那个重载,可一次性替换~ --------------------编程问答-------------------- 兰州烧饼。。。。。


我骂人了。/ --------------------编程问答-------------------- 开玩笑,bill从小就是找Bug的!!! --------------------编程问答-------------------- LZ此帖发出以后,从此销声匿迹,再也没有回复或结帖了…… --------------------编程问答-------------------- up --------------------编程问答--------------------
引用 52 楼 gbb21 的回复:
LZ此帖发出以后,从此销声匿迹,再也没有回复或结帖了……

人家累了一星期了 没看是早上6点发的贴,肯定睡觉去了。 --------------------编程问答-------------------- 我是围观人! --------------------编程问答-------------------- 一天过去了楼主依然没有现身,唉
--------------------编程问答-------------------- LZ不知道去哪了。。。 --------------------编程问答-------------------- 请帖具体案例 --------------------编程问答-------------------- 敢不敢上源码
--------------------编程问答-------------------- 错误也许出在 string这个类型的特殊性上,这个建议楼主好好研究下,

我也帮不了什么,顺便说一句,楼主是冲动但这个 尚可理解,有时人一激动

查不出来,就想歪了,其实排查自己代码的内鬼 非常的累,真的,而且需要

有耐心。 --------------------编程问答--------------------
引用 54 楼 bestbadgod 的回复:
引用 52 楼 gbb21 的回复:
LZ此帖发出以后,从此销声匿迹,再也没有回复或结帖了……

人家累了一星期了 没看是早上6点发的贴,肯定睡觉去了。


睡也该醒了 --------------------编程问答-------------------- --------------------编程问答-------------------- 等你感觉出来是自己代码问题或者一直以来对某个东西理解错误的时候,会比较害羞的 --------------------编程问答--------------------
引用 38 楼 zhoufoxcn 的回复:
貌似今天不是愚人节啊?
真会开玩笑。


惊现周公。。。
前不久刚买了你的《ASP.NET 夜话》 --------------------编程问答-------------------- 擦,我居然看不懂楼主的语法。。。不知道是微软的杯具还是楼主的杯具还是我的杯具 --------------------编程问答-------------------- hahahahahahaha --------------------编程问答-------------------- 赶紧结贴吧 --------------------编程问答-------------------- 感觉不太可能,有空试试 --------------------编程问答-------------------- 不能确信,建议楼主再分析一下 --------------------编程问答-------------------- 免费用别人的东西不要乱叫,有本事自己做一个. --------------------编程问答-------------------- 关键是LZ消失了…… --------------------编程问答-------------------- 语言本没有错, 有错的都是人自己的思想。
好好看看的算法有没有问题,我觉得,对于字符串的处理,你最好还是使用正则表达式。 --------------------编程问答-------------------- 追踪此帖~ --------------------编程问答-------------------- 来看哈 --------------------编程问答--------------------
引用 44 楼 yixianggao 的回复:
标题党!

有胆贴源码看看!


你可别把我笑死了哈。。。

哈哈哈哈。。。新名词:标题党。 --------------------编程问答--------------------
引用 75 楼 linjf520 的回复:
引用 44 楼 yixianggao 的回复:
标题党!

有胆贴源码看看!


你可别把我笑死了哈。。。

哈哈哈哈。。。新名词:标题党。

早就有的词了 --------------------编程问答-------------------- 还没结帖,继续追踪…… --------------------编程问答--------------------
引用 25 楼 sandy945 的回复:
引用 19 楼 viena 的回复:
 不明真相群众来围观下~


 一小撮不明真相群众来围观~


同上
--------------------编程问答-------------------- 我来围观一下楼主的BUG。 --------------------编程问答-------------------- 我用微软的东西,比如c# sql 也出过一些莫名其妙的错误
--------------------编程问答-------------------- 还是自个在思想方法上着手吧. --------------------编程问答-------------------- Relace不可能是抽样的
你以为搞民意调查啊
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,