.net - >的性能是什么?注册码?

时间:2011-05-17 14:13:01

标签: .net .net-4.0 registry

粗略地说,从Windows注册表读取/删除密钥的.net代码的性能是什么?它类似于文件i / o吗?快点?更接近记忆i / o?慢点?更接近网络i / o? (我无法想象......只是说完整性=)

1 个答案:

答案 0 :(得分:2)

您甚至无法开始将网络I / O与本地文件i / o /注册表访问进行比较,因为还有更多因素在起作用。

理论上你可以设计某种测试来比较文件读取和注册表读取,但我认为它没有任何好处。此测试仍可能存在缺陷,因为它可能取决于您正在阅读哪些密钥以及可能还在后台读取注册表的其他应用程序。

如果您需要访问注册表,那么花费的时间在很大程度上是无关紧要的,因为您无论如何都无法选择 - 与文件i / o一样。

修改

快速测试给出以下结果:

  • 100,000次注册表读取 1.81 - 1.89 s

  • 对9字节文件进行100,000次读取需要 19.80 - 20.10 s (因此注册表的速度要快很多(~10x):)。

    Dim sw As New Stopwatch
    
    Dim subkey As RegistryKey
    Dim value As String
    Dim keyValue As String
    
    sw.Reset()
    sw.Start()
    For i As Integer = 1 To 100000
        keyValue = "SOFTWARE\Codejock Software\Xtreme SuitePro ActiveX v15.0.2"
        subkey = Registry.LocalMachine.OpenSubKey(keyValue, False)
        value = subkey.GetValue("Installation Directory")
    Next
    sw.Stop()
    Debug.WriteLine("Registry Read:" + sw.ElapsedMilliseconds.ToString)
    
    Dim fileContents As String
    
    sw.Reset()
    sw.Start()
    For i As Integer = 1 To 100000
        fileContents = My.Computer.FileSystem.ReadAllText("C:\scratch\Text.txt")
    Next
    sw.Stop()
    Debug.WriteLine("File Read:" + sw.ElapsedMilliseconds.ToString)