在我的SQLite Adapter
类中,对于Android应用程序,我有以下方法。键KEY_WAS
可以是0或1.该方法在数据库中搜索给定的name
和给定的date
(对于给定的日期,只能有一个唯一的条目DB中的特定名称)。因此,如果存在这样的条目,我们进入if
,否则was
保持为零。最后,返回was
。
public int wasHere(String name, String date) throws SQLException {
Log.d("wasHere", "begins, date = " + date);
Cursor c = ourDatabase.query(DATABASE_TABLE, ALL_KEYS, KEY_NAME
+ "=" + "'" + name + "'" + " AND " + KEY_DATE + "=" + "'"
+ date + "'", null, null, null, null);
Log.d("wasHere", "below Cursor");
int was = 0;
if(c.moveToFirst()) {
Log.d("wasHere", "inside IF");
was = c.getInt(c.getColumnIndex(KEY_WAS));
}
Lod.d("wasHere", "ends");
return was;
}
从日志条目中,我粘贴了一些特定的条目(您可以忽略“开始”和“结束”之间的时间,因为这取决于调用wasHere
的循环):
07-18 07:08:03.398: D/dbwas(29568): begins, date = 08 Aug 2013
07-18 07:08:03.398: D/dbwas(29568): below cursor
07-18 07:08:03.398: D/dbwas(29568): ends
07-18 07:08:03.398: D/dbwas(29568): begins, date = 09 Aug 2013
07-18 07:08:03.406: D/dbwas(29568): below cursor
07-18 07:08:03.406: D/dbwas(29568): ends
07-18 07:08:03.359: D/dbwas(29568): begins, date = 02 Aug 2013
07-18 07:08:03.359: D/dbwas(29568): below cursor
07-18 07:08:03.367: D/dbwas(29568): inside IF
07-18 07:08:03.367: D/dbwas(29568): ends
07-18 07:08:03.367: D/dbwas(29568): begins, date = 03 Aug 2013
07-18 07:08:03.367: D/dbwas(29568): below cursor
07-18 07:08:03.375: D/dbwas(29568): inside IF
07-18 07:08:03.375: D/dbwas(29568): ends
07-18 07:08:03.430: D/dbwas(29568): begins, date = 14 Aug 2013
07-18 07:08:03.430: D/dbwas(29568): below cursor
07-18 07:08:03.430: D/dbwas(29568): inside IF
07-18 07:08:03.430: D/dbwas(29568): ends
我的问题是关于“开始”和“结束”的日志时间。如您所见,在五个日志条目中,两个(8月8日和8月14日)从“开始,日期= ...”到“结束”需要0次。
8月9日执行Cursor
语句需要8毫秒(.008秒)。
8月8日和 3月8日执行if
语句需要8毫秒(.008秒)。
8月14日没有时间执行上述两个陈述中的任何一个。
同样,“日志”中存在许多此类差异。对于不同的日期,Cursor
和if
语句随机占用8毫秒(是的,时间总是8毫秒)。
现在,我正在执行“wasHere”方法数百次,因此数百个8毫秒花费了我太多时间。为什么上述差异是随机发生的。是否有任何方法可以删除它(或者可能是另一种方式来做我正在做的事情)。 [8月8日和8月14日的陈述应该是零时间。]
答案 0 :(得分:1)
在您的系统上,定时器中断显然以125 Hz运行,因此每8 ms发生一次。 如果你的函数在两个定时器中断之间完全执行,你会看到时间戳没有变化,但是如果你的函数执行时发生了定时器中断,你会看到8 ms的跳跃。
实际执行时间没有差异;日志中的时间戳不够精确。