![]() |
1
1
似乎你在尝试微优化,这意味着你将花费大量精力使你的程序运行相同的速度。首先关注代码的清晰性,然后优化实际缓慢的代码。 假设您已经分析并发现这是应用程序在现实场景中的瓶颈: 使用它是不雅的(通常是性能上的拖累) 非特殊情况例外 病例。见 http://www.developerfusion.com/code/4650/validating-an-integer/ 例如。
根据情况的限制,你最好改变一下
(见 http://msdn.microsoft.com/en-us/library/system.int32.tryparse.aspx ) 或:
(见 http://www.hanselman.com/blog/ExploringIsNumericForC.aspx ) 或
然后:
|
![]() |
2
1
最好的答案是使用regex或 Jay Bazuzi's int.TryParse suggestion . 举个简单的例子,试试这个 LINQPad :
尝试一次对两个方法中的一个进行注释,并尝试对n的不同值进行性能测试。 我的经验(在我的Core2 Duo笔记本电脑上)似乎表明:
ParseMethod与Regex具有相同的性能(如果在代码示例中以内联方式执行,则速度稍快,如果在单独的方法中执行,则速度稍快,即替换Isinteger方法体)。 注意:创建字符串的成本不包括在内(如果愿意,请插入日期差异),但这两种方法的成本相同。 如果大多数键不带“q”(从未调用isinteger),那么这些数字就更接近了,但regex是好的或更好的。 即使是在这种情况下 即(对于“asdasd”而不是“qasd”的填充字符串):
同样,parsemethod具有与regex相同的性能。 结论: 使用regex或typarse,在最坏的情况下会更快,否则也会更快。 但是,是否有更好/更快的方法从字符串集合中选择int值?也许是一个以某种方式编译得更快的通用过滤器? |
![]() |
3
1
ISinteger的瓶颈可能是由于try-catch。 我尝试用胰蛋白酶替代Isinteger,得到以下结果(n=1000000): Regex方法:540 ms 胰蛋白酶法:537 ms 我对第二种方法使用了以下代码:
故事的寓意是… 虽然我通常喜欢使用regex,但在这个简单的情况下,字符串操作很简单,台盼色解决方案是完全可以接受的。从性能上讲,使用哪种方法并不重要,但不要使用异常处理来检查某个字符串值是否是int! |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 5 月前 |
![]() |
Pavel Foltyn · 如何在C中生成逆字典# 6 月前 |
![]() |
ewok · 基于种子和上一个值创建值列表 11 月前 |
|
Vasu V · 将foreach转换为select语句 1 年前 |
![]() |
Modest · 使用命名空间和文本值序列化xElement 1 年前 |