读书人

string.Lengthgt;零成了性能杀手?性能差

发布时间: 2013-10-14 12:54:46 作者: rapoo

string.Length>0成了性能杀手??性能差10倍...(散分,进者有分)
好久没来,给大家问好了!问个问题,进者有分。
有两个Dictionary


[解决办法]
新手表示不懂,等大牛解释。谷歌去了
[解决办法]
值,不会全是空串吧string.Length>零成了性能杀手?性能差10倍.(散分,进者有分)
[解决办法]
确定是value.Length〉0的结果而不是其他的,比如if里面的与“&&”也造成的性能损失?
[解决办法]
String.Length 是需要执行内部函数的。
不是直接获取一个值。
[解决办法]
foreach (string value in dic1.Values)
{
if (value.Length > 0 && dic2.ContainsValue(value))//3162ms
//if (dic2.ContainsValue(value))//248ms
{
return true;
}
}
return false;


你自己看明白你自己写的代码的意思了吗?
是在dic1里面找到第一个存在于dic2的元素。你加了value.Length > 0相当于条件严格了。假设前部分里面空串很多,那就相当于每次多循坏了很多次。

另外,别遇见问题就觉得好像很奇怪,先检查自己的代码才是关键。记住一点,开发底层的人基本来说比你聪明,而且比你想的多。
[解决办法]
学习下啊,这问题以后开发要注意的
[解决办法]
string的内部实现其实是char数组,了解到这里就清楚了,你必须先把char数组的长度算出来,得出count返回给Length
[解决办法]
if(!string.IsNullOrEmpty(value))判断不行么?
------解决方案--------------------


字典不是这样用的。
[解决办法]
你怎么就知道差10倍~~别忘了你是放在循环中的哦~这个差距被放大了~
[解决办法]

引用:
Quote: 引用:

你自己看明白你自己写的代码的意思了吗?
是在dic1里面找到第一个存在于dic2的元素。你加了value.Length > 0相当于条件严格了。假设前部分里面空串很多,那就相当于每次多循坏了很多次。

另外,别遇见问题就觉得好像很奇怪,先检查自己的代码才是关键。记住一点,开发底层的人基本来说比你聪明,而且比你想的多。


原因找到了,是执行次数不一样,一个执行9403228次,一个执行38514次,现在关键是怎么优化让这个循环少执行一些哦。

如果你的需求就是这样子,那么循环次数没法减少,因为你的逻辑就是要全遍历查找是否存在不为空并且相等的字符串。
只能从数据的存储结构去下手提高效率。你现在用Dictionary的方式很不高效。
[解决办法]
Dictionary中查找Value相当于遍历,没法发挥hash散列的优势
[解决办法]
没试过,但就算多加一个value.Length > 0 判断,也不应该差这么多
[解决办法]
好多的大牛,学习了
[解决办法]
if (value.Length > 0 && dic2.ContainsValue(value))//3162ms

这个判断需要3秒种吧?什么程序要这么慢?
[解决办法]
我是菜鸟,说错了勿怪。我想的是这样(没验证,只是想法而已):
       private bool IsHaveSame(Dictionary<string, string> dic1,Dictionary<string, string> dic2)
{
foreach (string value in dic1.Values)
{
if(value==NULL
[解决办法]
value=="")
{
continue;
}
if (dic2.ContainsValue(value))
{
return true;
}
}
return false;
}

[解决办法]
求讲解 何因.....
[解决办法]
也许因为多出来的“value.Length?>?0?”改变了foreach的遍历顺序也说不定,字典不像List那样有固定的顺序
[解决办法]
if (value.Length > 0 && dic2.ContainsValue(value))//3162ms
脑子不清醒写出的代码。
楼主犯得错误实在是太多。
第一:value.Length > 0是把string当做char【】来处理 建议使用isEmpty
第二:&&条件运算 易假命题放前面,这样后面的条件判断次数会减少 ,有时也考虑耗性能判断放后面,即使它易假。
同理,
[解决办法]
运算 易真命题放前面)
第三,为什么不用linq。
[解决办法]
为什么不用空判断?

读书人网 >C#

热点推荐