2009-08-06 14 views
2

SQLiteは素晴らしいデータベースですが、Windowsで問題が発生しています。最初にアプリケーションを起動すると、100MBのデータベースに対してクエリを実行するまでに最大50秒かかることがあります。その後の負荷はその時間の10%を要します。WindowsプレキャッシュSQLiteの問題

SQLiteのメーリングリスト上でいくつかの議論の後、私はバグがWindowsである」 を聞いていますそれは積極的に前のキャッシュ大きなデータベースファイル
は - 。ファイルの大きな塊で読み込む - それはように見えるようにプログラムがOutlookのような
は、彼らが実際よりも優れている場合、彼らはの
わずか数バイトを求めるとき、彼らは
が読み込まれているどのくらいのを制御することはできませんので。残念ながら
が、これは、それが他の人がぎくしゃくを動作させますいくつかのプログラムをスピードアップファイル。"

この問題は、すべてがSQLiteから発生している間に進捗情報を取得する方法がないために複雑になります。したがって、ユーザーは何かが壊れていると思います。 (私はダミーの進捗報告を表示することができますが、それはシャープなツールにとっては本当に駄目です。)

私はプリキャッシングをグローバルにオフにする方法があると思いますが、これをプログラム的に回避する方法はありますか?

答えて

1

キャッシングの問題を解決する方法はわかりませんが、50秒は極端に聞こえます。クエリ自体がその10%を占める場合、これは100mbのファイルをロードするのに45秒を意味します。 Windowsがファイル全体を一度に読み込んでも、通常のハードドライブの速度があれば、数秒かかることはありません。

ファイルは非常に断片化されていますか?

ここでプレーするだけではなく、そこにあるように聞こえます。

+0

間違いなく。私は同様のサイズのsqliteデータベースを使って作業してきましたが、この問題は発生しませんでした。 –

+0

はい私はあなたが正しいと思います。クエリは単純ではありません。私はSQLiteが何かをしていると思っていますが、何をしたいのか分からないコードに陥ることはありません。その後のリクエストはこの時間の最大20%であるため、明らかに1回のイベントです。 –

+0

あなたはそれをプロファイラで実行して、どの機能がその時間をすべて食べるのか分かりませんか? – jalf

1

私の最初のクエリでも同じ問題があります。この問題は、長い間データベースを照会しないと戻ってしまいます。それはメモリキャッシングの問題のようです。私のソフトウェアは24時間365日実行され、ユーザーはSELECTクエリを実行します。同じサイズのデータ​​ベースに対してもクエリを実行しています。