Java/Android:I不';我不明白为什么这比预期的要慢
我有这个方法:Java/Android:I不';我不明白为什么这比预期的要慢,java,android,Java,Android,我有这个方法: @DebugLog private synchronized int insertInOrderedFromBottom(ItemWithTime itemWithTime, ArrayList<ItemWithTime> array) { long start = System.currentTimeMillis(); if (itemWithTime == null || itemWithTime.getDateTime() == null) re
@DebugLog
private synchronized int insertInOrderedFromBottom(ItemWithTime itemWithTime, ArrayList<ItemWithTime> array) {
long start = System.currentTimeMillis();
if (itemWithTime == null || itemWithTime.getDateTime() == null) return -1;
if (array == null) return -1;
int arraySize = array.size();
for (int i = arraySize - 1; i >= 0; i--) {
if (itemWithTime.getDateTime().isBefore(array.get(i).getDateTime())) {
i++;
array.add(i, itemWithTime);
long end = System.currentTimeMillis();
Log.d(TAG,"insertInOrderedFromBottom inside took "+(end-start));
return i;
}
}
array.add(itemWithTime);
long end = System.currentTimeMillis();
Log.d(TAG,"insertInOrderedFromBottom inside took "+(end-start));
return array.size();
}
- 这里的日志显示需要10-15个磨坊
我尝试过没有同步,也没有区别。android日志功能相当慢。因此,如果在内部循环中有一个打印时间差的日志,那么它本身将花费毫秒数。因此,最后的输出计时反映了在内部循环中执行Log.d所需的时间。android日志函数相当慢。因此,如果在内部循环中有一个打印时间差的日志,那么它本身将花费毫秒数。因此,最后的输出计时反映了在内部循环中执行Log.d所需的时间我不明白您的要求。你首先写‘他们说完成这个方法需要大约0百万’(谁这么说?)。稍后,您自己的日志显示需要10-15毫秒。您现在的问题到底是什么?日志上说:
Log.d(标记“insertinoderedfrombottom,loop take”+(end-start)+“ms”)请阅读我的问题并回答。大约0毫秒的第一句话呢?谁说的?你到底有什么问题?我明白了,你换了职位。那么你的问题是为什么内部循环快而整个循环慢?循环(根据日志)需要0毫秒。整个方法从开始到完成需要0毫秒(根据日志),但是方法调用前后的日志显示有15毫秒的差异,我不理解您的要求。你首先写‘他们说完成这个方法需要大约0百万’(谁这么说?)。稍后,您自己的日志显示需要10-15毫秒。您现在的问题到底是什么?日志上说:Log.d(标记“insertinoderedfrombottom,loop take”+(end-start)+“ms”)请阅读我的问题并回答。大约0毫秒的第一句话呢?谁说的?你到底有什么问题?我明白了,你换了职位。那么你的问题是为什么内部循环快而整个循环慢?循环(根据日志)需要0毫秒。整个方法从开始到完成需要0毫秒(根据日志),但是方法调用前后的日志显示了15毫秒的差异。感谢Werner,实际上是日志本身减缓了与System.out.println语句相同的速度。在I/O上花费的时间通常是令人惊讶的。谢谢Werner确实是日志本身减缓了System.out.println语句的速度。在I/O上花费的时间往往令人惊讶。
start = System.currentTimeMillis();
insertInOrderedFromBottom(datum, items);
end = System.currentTimeMillis();
Log.d(TAG, "insertInOrderedFromBottom invoication took " + (end - start) + " ms");