android - 简单循环执行时间的巨大差异:怎么会?
问题描述
我注意到即使是在两个相似但不同的设备(即三星 Galaxy S4 和 S7)上的简单循环,执行时间也存在巨大差异。在 S7 上,下面的测试需要大约 5 毫秒,而在 S4 上大约需要 250 毫秒,相差 50 倍。我敢肯定 S7 比 S4 快,但是 50X ???
我试过 Android Profiler (CPU, MEMORY) 但没有看到任何危险信号。S7 应用程序以大约 10% 的 CPU 运行,而 S4 以大约 25% 的速度运行。
下面的代码是我实际应用程序的大量摘录。
//@ Test Timing
public static void timingTest()
{
int i,count=0;
long t1,t2;
String TAG="MYAPP";
t1 = System.currentTimeMillis();
for( i=0; i<4000000; i++ ) { // get start time
count++; // just bump count
}
t2 = System.currentTimeMillis(); // get stop time
String msg=String.format( "ELAPSED = %8.3f sec.", 0.001*(t2-t1) );
Log.i( TAG, msg ); // announce elapsed time
}
我认为这可能是优化方面的差异,但如果我将真正的(不可优化的)处理放入循环中,则没有相对差异。Debug 和 Release 版本之间也没有任何区别。
我已经打败了一个星期了,没有额外的洞察力。
有人对此有任何想法,还是我只是运气不好?
解决方案
事实证明这只是一部坏手机。多么尴尬。我借了一个朋友的 S3,我的基准测试显示性能降低了约 50%(约 10 毫秒),我认为这对于更旧的手机来说是正常的预期。奇怪的是我的 S4 运行良好- 只是速度很慢。男孩,那是浪费了一周的时间,我再也回不来了。
推荐阅读
- ruby - sudo gem instal sass 给我这个错误:错误:无法构建 gem 本机扩展
- python - 在 Python 中读取多个文件并使用字符串重命名它们 - str(i+1) 不起作用?
- azure - 使用 Azure DevOps 跨环境部署 Azure 资源
- c# - 从数据库中创建一个 ID 列表。C#
- python - 来自 Python BufferedIO 对象的 C `FILE` 流
- nginx - 如何为在不同端口上的同一台机器上运行的 2 个应用程序配置 Nginx 反向代理
- javascript - 循环遍历对象的对象
- javascript - 如何使用“所有”集合以与 Gatsby.js 中的文件系统路由 API 一起使用?
- ruby - 带替换的 Ruby 字符串插值
- python - 使用 OpenCV 识别 7 段显示器上的数字