![]() |
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! |
![]() |
Imad · Linq扩展方法没有使用Object类的Equals 1 年前 |
![]() |
user8512043 · 根据每个元素中的数字对列表进行排序 2 年前 |
![]() |
Nick Fleetwood · 调度语法的LINQ查询 2 年前 |
![]() |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
![]() |
Drago · Linq通过比较Id和具有Id的对象列表来查询获取列表 2 年前 |