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 回答