![]() |
1
40
您应该避免担心特定语言功能的性能影响,除非您有特定的证据(度量)证明它们确实导致了问题。 您主要关心的应该是代码的正确性和可维护性。 然而,一般来说,在c中,只要应用良好的oo编程实践并适当地使用泛型(特别是集合),就可以避免不必要的转换。在那些确实需要执行强制转换的情况下,除非您在紧密循环中执行强制转换,或者使用可能引发无效强制转换异常的类型执行强制转换,否则它极不可能成为性能瓶颈。 大多数现实世界中的性能问题都是由算法选择或缺乏对平台本身的认识引起的,而不是由特定的语言特性引起的。 |
![]() |
2
21
不,无论如何都不应该避免。选演员不太贵。当然,如果你有一个每秒运行一百万次的循环,那么避免强制转换以节省一些性能是有意义的,否则它不会真正导致性能问题。 铸造的真正问题是它是作弊类型的安全。如果你不小心,如果你把所有东西都放在一个地方,那么引入bug或者降低代码的可读性就不难了。 |
![]() |
3
4
如果您可以使用泛型,那么它是比强制转换更好的解决方案。装箱和拆箱是一项昂贵的操作,应尽可能避免。问题是有时候这是无法避免的。 另外,这里提到的另一个答案是,与特定的性能问题或代码可维护性相比,担心装箱之类的事情是非常微不足道的。我完全同意。 |
![]() |
4
3
一般来说,在一个特殊的基础上铸造一个物体的成本是很低的。但是,如果您多次重复投射对象,则在该情况下,如果发现是性能问题的原因,应尽量避免投射对象。 毕竟,从.NET1.1到2.0的一个主要改进是引入了泛型——这解决了对象的强类型列表的问题(例如arraylist=基于对象,list=类型列表) |
![]() |
Jiji · 将简单对象强制转换为简单的通用接口 7 年前 |
![]() |
tobeypeters · 反射铸造 7 年前 |
![]() |
Alex · 是否改为存储字符串的整数的通用ArrayList? 7 年前 |
![]() |
Kai · 如何在C#中转换会话中存储的词典? 7 年前 |
![]() |
Ján ЯabÄan · 布尔值到双精度的快速转换方法 7 年前 |