0

私の SQLiteAdapterクラス内には、Android アプリケーション用に次のメソッドがあります。キーKEY_WASは 0 または 1 のいずれかです。このメソッドは、データベース内nameで指定dateされたものと指定されたものを検索します (特定の日付について、DB 内の特定の名前に対する一意のエントリは 1 つだけです)。したがって、そのようなエントリが存在する場合は の中に入りif、そうでない場合wasは 0 のままです。最後に、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

私の質問は、「開始」と「終了」のログ時間に関するものです。上記のように、5 つのログ エントリのうち 2 つ (8 月 8 日と 8 月 14 日) は、"begins, date = ..." から "ends" までの時間が 0 です。

9 AugCursorでは、ステートメントの実行に 8 ミリ秒 (.008 秒) かかります。

2 Aug3 Augifでは、ステートメントの実行に 8 ミリ秒 (.008 秒) かかります。

8 月 14 日、上記の 2 つのステートメントのいずれかを実行するのに時間がかかりません。

同様に、「ログ」にもそのような矛盾がたくさんあります。さまざまな日付の場合、Cursorandifステートメントはランダムに 8 ミリ秒かかります (そして、時間は常に 8 ミリ秒です)。

現在、「wasHere」メソッドを何百回も実行しているため、数百 8 ミリ秒の時間がかかりすぎます。上記の不一致がランダムに発生するのはなぜですか。そして、それを削除する方法はありますか(または、私がしていることを行う別の方法かもしれません)。[8 月 8 日と 8 月 14 日のステートメントは、当然のことながら時間がかかりません。]

4

1 に答える 1

1

お使いのシステムでは、タイマー割り込みは明らかに 125 Hz で実行されるため、8 ミリ秒ごとに発生します。関数が 2 つのタイマー割り込みの間に完全に実行された場合、タイムスタンプに変化は見られませんが、関数の実行中にタイマー割り込みが発生した場合、8 ミリ秒のジャンプが見られます。

実際の実行時間に矛盾はありません。ログのタイムスタンプは正確ではありません。

于 2013-07-18T07:28:22.623 に答える