对于我的研究,我正在测量移动客户端(用Flutter编写)通过Socket连接到服务器(用Ktor编写)所花费的时间。我的应用程序连接和断开了10次套接字,结果是这样的(以毫秒为单位):
[23, 19, 1, 1, 2, 1, 6, 2, 3, 1]
有人可以向我解释,在1-2-3个连接之后,下一个连接仅花费几毫秒的时间怎么可能?
我的测试方法是否错误,或者它下面是某种Dart机制?
连接客户端的功能:
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;
}
它是通过单击按钮触发的。
答案 0 :(得分:1)
我对此并不了解很多,但是我猜测是JIT编译(例如,建立连接时执行的函数可能会在第一次调用时进行编译)或某种优化(当多次调用代码时,可能可以根据代码所采用的路径和输入值对其进行优化。
也就是说,如果要评估Flutter中应用程序的性能,应查看profile mode。在调试模式(在Dart VM中运行并针对调试,快速构建时间,热重载进行了优化)和配置文件/发布模式(提前编译为本机代码)之间,性能特征可能会有很大差异。 >