0

ハードディスクからアプリケーションを実行しているときのsqliteデータベースがありますが、最初のクエリは高速ですが、DVDのアプリケーションフォームを実行すると、最初のクエリの実行に約30秒かかります。73 MB

だから私は私のアプリがDVDから実行されたときに正確に何が起こっているのか尋ねたいですか?

データベースをいくつかの小さな部分に吐き出すことで、データベースの最初のクエリ速度を向上させることはできますか?

これは私の質問です:

var SQlQuery = string.Format("SELECT ContentText FROM TblBookContent " +
                  "WHERE (BookID = {0}) AND (BookContentIndex={1}) Limit 1", bookid, BookContentIndex);
            string ConString = string.Format("Data Source={0}{1}.s3db;Version = 3;",
                CFAddress.ADatabase, DBName.BooksDB);

            using (SQLiteConnection connection = new SQLiteConnection(ConString))
            {
                connection.Open();
                using (SQLiteCommand command = new SQLiteCommand(SQlQuery, connection))
                {
                    using (SQLiteDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            CHtmlDesign.HtmlFile = reader["ContentText"].ToString();
                        }
                    }
                }
                connection.Close();
            }
4

1 に答える 1

3

何よりもDVDドライブのシーク時間に関係していると思います。CDとDVDのシーク時間はハードディスクに比べてかなり遅いですが(HDDは5000+ RPMで回転し、データベースサーバーには11000RPMを超えるHDDが搭載されることがよくあります)、CDとDVDははるかに遅く、可変速度(おそらく約250)で回転します。 CDの場合は500RPM、DVDの場合は600〜1300RPM)

これらのRPMは、シーク時間を部分的に決定します。ディスクの別の部分にデータが必要な場合は、回転を正しい速度に高速化または減速し、ディスクの一部が読み取りヘッドに戻るのを待つ必要があるためです。また、読み取りヘッドをディスクの一部に時間内に移動しない場合は、次の回転を待つ必要があります。

CDおよびDVDは、線形アクセス(オーディオまたはビデオの記録など)には非常に優れていますが、必要な情報を見つけるのに時間がかかるため、ランダムアクセスには適していません。

于 2013-01-26T11:18:41.397 に答える