任何快速的方法来获得卷序列号? [英] Any faster method to get Volume Serial number?

查看:148
本文介绍了任何快速的方法来获得卷序列号?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是用这个code,以生成机器签名。但是,这需要显着的时间来执行。不知道为什么就这么慢?任何快速的方法建议?

 公共共享功能DriveSN(BYVAL驱动器号作为字符串)作为字符串
    昏暗的磁盘的ManagementObject =新的ManagementObject(的String.Format(的Win32_LogicalDisk ='{0}',驱动器号))
    昏暗卷名作为字符串= disk.Properties(卷名)。Value.ToString()
    昏暗的SerialNumber作为字符串= disk.Properties(VolumeSerialnumber)。Value.ToString()
    返回SerialNumber.Insert(4, - )
端功能

私人共享MSIG作为字符串=无

公共共享功能MachineSignature()作为字符串
    如果MSIG是没有那么
        昏暗的列表作为新的列表(串)
        对于每个D作为DriveInfo在DriveInfo.GetDrives()
            如果(d.IsReady)然后
                list.Add(DriveSN(d.Name.Substring(0,2)))
            结束如果
        下一个
        MSIG =的string.join(与&,list.ToArray())
    结束如果
    返回MSIG
端功能
 

解决方案

这是令人尴尬的。性能问题可以通过简单地加以解决检查固定的驱动器。

 公共共享功能MachineSignature()作为字符串
    如果MSIG是没有那么
        昏暗的列表作为新的列表(串)
        对于每个D作为DriveInfo在DriveInfo.GetDrives()
            如果(d.DriveType = DriveType.Fixed)AndAlso(d.IsReady)然后'<  - 检查的DriveType'
                list.Add(DriveSN(d.Name.Substring(0,2)))
            结束如果
        下一个
        MSIG =的string.join(与&,list.ToArray())
    结束如果
    返回MSIG
端功能
 

Hi I'm using this code to generate machine signature. But it's take noticeable time to execute. Wonder why it's that slow ? Any faster method recommended ?

Public Shared Function DriveSN(ByVal DriveLetter As String) As String
    Dim disk As ManagementObject = New ManagementObject(String.Format("Win32_Logicaldisk='{0}'", DriveLetter))
    Dim VolumeName As String = disk.Properties("VolumeName").Value.ToString()
    Dim SerialNumber As String = disk.Properties("VolumeSerialnumber").Value.ToString()
    Return SerialNumber.Insert(4, "-")
End Function

Private Shared msig As String = Nothing

Public Shared Function MachineSignature() As String
    If msig Is Nothing Then
        Dim list As New List(Of String)
        For Each d As DriveInfo In DriveInfo.GetDrives()
            If (d.IsReady) Then
                list.Add(DriveSN(d.Name.Substring(0, 2)))
            End If
        Next
        msig = String.Join(" & ", list.ToArray())
    End If
    Return msig
End Function

解决方案

This is embarrassing. The performance problem can be solved by simply check for "fixed" drive.

Public Shared Function MachineSignature() As String
    If msig Is Nothing Then
        Dim list As New List(Of String)
        For Each d As DriveInfo In DriveInfo.GetDrives()
            If (d.DriveType = DriveType.Fixed) AndAlso (d.IsReady) Then  ' <-- check for DriveType'
                list.Add(DriveSN(d.Name.Substring(0, 2)))
            End If
        Next
        msig = String.Join(" & ", list.ToArray())
    End If
    Return msig
End Function

这篇关于任何快速的方法来获得卷序列号?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆