一个小问题...
我知道在其他语言中,有些库的代码由于性能原因部分采用特定平台的C语言编写。在这种情况下,尽可能使用库代码可以获得巨大的性能提升。
那么.NET平台是否也是如此呢?微软的基础类库实现是否已经优化,以至于我无法在托管代码中与之匹敌?
如果只是像使用KeyValuePair作为类型安全元组结构体,而不是编写自己的代码,是否也会有类似的效果呢?
一个小问题...
我知道在其他语言中,有些库的代码由于性能原因部分采用特定平台的C语言编写。在这种情况下,尽可能使用库代码可以获得巨大的性能提升。
那么.NET平台是否也是如此呢?微软的基础类库实现是否已经优化,以至于我无法在托管代码中与之匹敌?
如果只是像使用KeyValuePair作为类型安全元组结构体,而不是编写自己的代码,是否也会有类似的效果呢?
我自己也曾经想过这个问题,但我怀疑情况并非如此,因为你可以在反编译器中“反编译”所有基础库。
使用这些基础库仍然比自己编写代码具有性能优势,因为代码很可能已经被即时编译并缓存。
我建议您大部分时间使用内置类,除非您已经测量过它不够快。
我相信微软花了很多时间和精力来构建快速可靠的东西。当然,您可以在几周的努力后击败他们...但我认为大多数情况下这不值得。
唯一看起来可以重写某些东西的时候是当它不能满足您的所有需求。只要注意时间成本和相关难度即可。
你能希望达到这种性能吗?可能,但请记住他们的代码已经经过充分测试和极度优化,所以我认为除非你有一个非常特定的需求,没有直接满足的BCL类型,否则这不是一项值得努力的工作。
.NET 4.0已经有了一个很好的Tuple<>
实现。虽然在以前的.NET版本中,如果你需要比KeyValuePair更大的东西,你就必须自己编写。
真正的性能提升来自于微软团队构建和测试库方法的事实。您可以非常放心地确信对象将在不引入错误的情况下运行。
然后还有重新发明轮子的问题。你必须有一个很好的理由才能这样做。
主要的性能原因通常在于架构或复杂算法,语言并不重要。
微软基础类库总是为“重型”方法提供复杂度解释。因此,您可以轻松决定使用它,或者找到另一个“更快”的算法来实现或使用。
当涉及到重型算法(图形、归档等)时,从低级语言转换可以获得性能提升。