kem*_*002 15 c# generics performance
我在这里工作的系统是在.net 2.0之前编写的,并没有使用泛型.它最终更新到2.0,但由于时间限制,没有任何代码被重构.在许多地方,代码使用ArraysLists等将事物存储为对象.
从性能角度来看,将代码更改为使用泛型有多重要?我从性能的角度来看,拳击和拆箱等等,这是低效的,但是改变它会带来多大的性能提升?仿制药是否可以在前进的基础上使用,或者是否有足够的性能变化以便为更新旧代码做出良心努力?
Ror*_*ory 14
从技术上讲,仿制药的性能,正如你所说,更好.但是,除非性能非常重要并且您已经在其他领域进行了优化,否则您可能会花时间在其他地方获得更好的改进.
我会建议:
当然除了性能之外还有其他原因可以改为泛型:
这是我从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
Run Code Online (Sandbox Code Playgroud)