Странное время подключения к розетке, дротику, флаттеру - PullRequest
0 голосов
/ 15 марта 2019

для моего исследования я измеряю время, которое требуется, чтобы мобильный клиент (написанный на Flutter) подключился к серверу (написанный на Ktor) через Socket. Мое приложение подключается и отключается к сокету 10 раз, и мои результаты выглядят так (в миллисекундах): [23, 19, 1, 1, 2, 1, 6, 2, 3, 1] Может кто-нибудь объяснить мне, как это возможно, что после 1-2-3 подключений время для следующего занимает всего несколько миллисекунд? Мой метод тестирования неправильный или под ним какой-то механизм Дартса?

Функции, которые подключают клиента:

void connectionLoop() {
  _connectionTimesMultiple().then((connectionTime) {
    _connectionTimes.add(connectionTime);
    if (_connectionTimes.length < 10) {
      connectionLoop();
    } else {
      print(_connectionTimes);
      final numberInList = _connectionTimes.length;
      final averageTime =
          _connectionTimes.reduce((a, b) => a + b) / numberInList;
      print(averageTime);
    }
  });
}

Future<int> _connectionTimesMultiple() async {
  final stopwatch = Stopwatch()..start();
  Socket sock = await Socket.connect('10.0.2.2', 8080);
  final connectionTime = stopwatch.elapsedMilliseconds;
  sock.close();
  return connectionTime;
}

И он запускается простым нажатием кнопки.

1 Ответ

1 голос
/ 15 марта 2019

Я не знаю много об этом, но я предполагаю, что это либо JIT-компиляция (например, ваша функция, которая выполняется при установлении соединения, может быть скомпилирована как часть первого вызова к ней), либо некоторая оптимизация ( когда код вызывается несколько раз, может быть возможно оптимизировать его на основе путей, которые он использует, и входных значений).

Тем не менее, если вы хотите измерить производительность приложения во Flutter, вы должны взглянуть на режим профиля . Характеристики производительности могут значительно различаться в зависимости от режима отладки (который работает на виртуальной машине Dart и оптимизирован для отладки, быстрого построения, горячей перезагрузки) и режима профиля / выпуска (который заранее скомпилирован в собственный код).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...