Список ближайших Bluetooth-устройств, а также устройств на базе


Я составила список близлежащих устройств принтера (которые соответствуют тем же именем в базе данных), а также все устройства принтер из базы данных. Они разделяются в списке "--". Я могу сделать код работает и работает. Однако, это медленно. Близлежащие устройства составляет примерно 10-15 ожидал, но устройства в базе их около 400.

Мне было интересно, как я могу рефакторинг мой код, чтобы сделать его чище, лаконичнее и эффективнее (самое важное). В настоящее время, это немного медленно, поэтому я добавляю в процессе баре, я называю этот метод в фоновом режиме. Это может занять несколько секунд, чтобы генерировать весь список.

Вот мой код:

public async Task<List<Models.Printer>> ListAllPrinters()
{
    //Gets all printers inside the Database 
    var printerDevices = await _deviceService.GetAllPrinters(); 

    //Gets all unpaired Bluetooth devices
    var unpairedDevices = BluetoothDevice.GetDeviceSelectorFromPairingState(false);

    //Gets all paired Bluetooth devices
    var pairedDevices = BluetoothDevice.GetDeviceSelectorFromPairingState(true);

    var unpairedNearDevices = (await DeviceInformation.FindAllAsync(unpairedDevices)).
        Select(x => x.Name).ToList();

    var pairedNearDevices = (await DeviceInformation.FindAllAsync(pairedDevices)).
        Select(x => x.Name).ToList();

    var nearbyDevices = unpairedNearDevices.Union(pairedNearDevices).ToList();

    List <Models.Printer> nearbyDevicesInDB = new List<Models.Printer>(); 
    List<Models.Printer> printers = new List<Models.Printer>();
    List<Models.Printer> printersList = new List<Models.Printer>();

        foreach (var printer in printerDevices)
        {
            printers.Add(new Models.Printer
            {
                SerialNumber = printer.SerialNumber,
                MacAddress = printer.MacAddress,
                IsInRange = false
            });

            //if nearby printer devices have the same name as device in database, then add it to nearbydevicesindb list 
            if (nearbyDevices.Contains(printer.SerialNumber))
            {
                nearbyDevicesInDB.Add(new Models.Printer
                {
                    SerialNumber = printer.SerialNumber,
                    MacAddress = printer.MacAddress,
                    IsInRange = true
                });
            }
        } 

    printersList = nearbyDevicesInDB;

    printersList.Add(new Models.Printer
    {
        SerialNumber = "--",
        MacAddress = "--"
    });

    printersList.AddRange(printers);

    return printersList;
}


520
3
задан 13 февраля 2018 в 05:02 Источник Поделиться
Комментарии