0

すべてのメモリを使用しているリストビューがあると思います。私が何をしているのか説明させてください

メッセージを取得するデバイスがあり、それらにタイムスタンプを付け、それらを sqldatabase に追加します

            myConnection.Open();
            SqlCommand cmd = new SqlCommand("INSERT INTO Messages (Time, Message) Values ('" + DateTime.Now + "', '"+sqlMessage+"')", myConnection);
            cmd.ExecuteNonQuery();
            myConnection.Close();
            UpdateTable();

リストビューを更新する方法は次のとおりです。

            myConnection.Open();
            myCommand.Connection = myConnection;
            adapter.SelectCommand = myCommand;
            myCommand.CommandText = "SELECT * FROM Messages";

            DataSet ds = new DataSet();
            adapter.Fill(ds);


            lvwMessages.DataContext = ds.Tables[0].DefaultView;
            myConnection.Close();

これをしばらく実行したままにすると、プログラムは通常メモリ不足になります。リストビューがデータベースからロードするメッセージが多すぎると思います。しかし、画面に必要な 15 行のメッセージが表示されているとしましょう。必要な 15 個だけをロードし、表示する必要のないものをメモリから取り出して、新しいものをロードするにはどうすればよいですか?

4

1 に答える 1

0

最新の 15 個のみを選択するようにクエリを変更します。

myCommand.CommandText = "SELECT TOP 15 * FROM Messages ORDER BY Time Desc";

TOP 15は、返された最初の 15 行のみを選択することを意味し、ORDER BYそれらが並べ替えられていることを確認しますTime( はDESC、それらを最高 (最新) から最低の順に並べ替え、最新のものを先頭に付けます)。

(どの DBMS について言及しなかったので、SQL Server で動作するものを投稿しました。SQL 構文と機能はそれらの間で異なる可能性があるため、今後の質問では適切なデータベース エンジン タグを含める必要があります。)

于 2013-09-11T23:17:48.910 に答える