我在这里工作的系统是在.net 2.0之前编写的,并没有使用泛型.它最终更新到2.0,但由于时间限制,没有任何代码被重构.在许多地方,代码使用ArraysLists等将事物存储为对象.
从性能角度来看,将代码更改为使用泛型有多重要?我从性能的角度来看,拳击和拆箱等等,这是低效的,但是改变它会带来多大的性能提升?仿制药是否可以在前进的基础上使用,或者是否有足够的性能变化以便为更新旧代码做出良心努力?
从技术上讲,仿制药的性能,正如你所说,更好.但是,除非性能非常重要并且您已经在其他领域进行了优化,否则您可能会花时间在其他地方获得更好的改进.
我会建议:
继续使用泛型.
如果您有可靠的单元测试,那么在触摸代码时重构泛型
花费其他时间进行重构/测量,这将显着提高性能(数据库调用,更改数据结构等),而不是几毫秒.
当然除了性能之外还有其他原因可以改为泛型:
因为你有类型的编译时检查,所以不容易出错
更具可读性,您不需要遍布整个地方,而且显而易见的是,哪种类型存储在集合中
如果你正在使用泛型,那么在任何地方使用它都会更清晰
这是我从100KB文件中简单解析一个字符串100,000次得到的结果.通用列表(Of char)在文件中花费了612.293秒来完成100,000次.ArrayList花了2,880.415秒来完成文件的100,000次.这意味着在这种情况下(因为您的里程会有所不同),通用列表(Of char)的速度要快4.7倍.
这是我运行了100,000次的代码:
Public Sub Run(ByVal strToProcess As String) Implements IPerfStub.Run Dim genList As New ArrayList For Each ch As Char In strToProcess.ToCharArray genList.Add(ch) Next Dim dummy As New System.Text.StringBuilder() For i As Integer = 0 To genList.Count - 1 dummy.Append(genList(i)) Next End Sub Public Sub Run(ByVal strToProcess As String) Implements IPerfStub.Run Dim genList As New List(Of Char) For Each ch As Char In strToProcess.ToCharArray genList.Add(ch) Next Dim dummy As New System.Text.StringBuilder() For i As Integer = 0 To genList.Count - 1 dummy.Append(genList(i)) Next End Sub