Поиск последовательного порта устройства с помощью ManagementObjectSearcher с очень длительным временем обработки

Я пишу прослушиватель, который принимает входные платежные данные, обрабатывает их, а затем взаимодействует с устройством, подключенным как COM-устройство (pinpad vx805). на каждой машине это устройство может быть назначено другому COM-порту (например, COM3, COM5 и т. д.)

после прочтения этого сообщения: Найти последовательный порт, к которому подключено мое устройство

я придумал этот фрагмент кода, который делает работу:

Private Shared Function isVX805PinPadConnected2() As Boolean
    Dim query = "SELECT DeviceID FROM Win32_SerialPort WHERE PNPDeviceID LIKE """ + "%VID_11CA&PID_0220%" + """"
    Console.WriteLine(query)
    Output.mainLog("startQuery")
    Dim resp = New ManagementObjectSearcher("root\cimv2", query).Get
    Output.mainLog("endQuery")
    Try
        Output.mainLog("aftertry")
        com = resp(0)("DeviceID").ToString
        Output.mainLog("after extracting com")
        Console.WriteLine("PinPad on " + com)
        Return True
    Catch ex As Exception
        Throw New ConstraintException("Pin Pad Com Port could not be located")
        Output.mainLog(ex)
    End Try
    Return False
End Function

Но его строка: com = resp(0)("DeviceID").ToString выполняется около 4 секунд, как показано в журнале:

2017/02/02 13:50:51 --> Запущен прослушиватель EMV

2017/02/02 13:53:10 --> Начать поиск пинпада

2017/02/02 13:53:11 --> startQuery

2017/02/02 13:53:11 --> endQuery

2017/02/02 13:53:11 --> после попытки

2017/02/02 13:53:15 --> после извлечения файла com

2017/02/02 13:53:15 --> Конец пинпада

2017/02/02 13:53:15 --> Запущен прослушиватель EMV

Любые идеи, как сделать это с лучшей производительностью? Большое спасибо


person Tal Aruety    schedule 02.02.2017    source источник