2013-07-18 19 views
0

在我的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個時間。

9 8月在執行Cursor語句時需要8 ms(.008秒)。

8月2日8月3日取8毫秒(0.008秒)在執行if語句。

14 8月沒有時間執行上述兩個語句中的任何一個。

同樣,在「日誌」中有很多這樣的差異。對於不同的日期,Cursorif語句隨機取8毫秒(是的,時間總是8毫秒)。

現在,我正在執行「wasHere」方法數百次,因此數百個8毫秒花費我太多時間。爲什麼上述差異是隨機發生的。有沒有什麼方法可以將其刪除(或者是我正在做的其他方式)。 [8月8日和8月14日聲明需要零時間,因爲他們應該。]

回答

1

在您的系統上,定時器中斷顯然運行在125赫茲,因此每8毫秒發生一次。 如果您的函數在兩個定時器中斷之間完全執行,您將看不到時間戳發生變化,但是如果在執行函數時發生定時器中斷,您將看到8 ms的跳轉。

執行時間實際沒有差異;日誌中的時間戳記不夠精確。

+0

我現在明白了。謝謝! –

+0

@BornAgain爲了回答你沒有問的問題:'CREATE INDEX blabla ON MyTable(date,name)' –