数据集在winforms应用程序中保留在内存中的时间

时间:2011-08-09 19:21:55

标签: c# winforms caching dataset

我对Windows窗体应用程序中的数据集有疑问。

第1部分:

问题:

1)数据集是否在每次实例化时都会访问数据库。

第2部分:

假设:

  • 我的第一个问题的答案是真的
  • 我正在使用的数据集的数据量相对较少,而且应用程序本身也没有大量的并发用户。
  • 表单数量可能很高,但需要相同的数据集。

问题:

1)将静态版本的数据集存储在内存中是一个坏主意。

选项(评估这些可能的解决方案):

选项1:创建一个静态类,充当数据集的容器。

选项2:在表单中创建需要的数据集,然后为依赖于该数据集的任何后续表单创建属性,并将对该数据集的引用传递给该特定表单,从而阻止GC重新分配内存(并减少数据库调用次数。)

伪代码:这是实例化数据集的父表单。

public partial class ParentForm: Form
{
   private DataSet dataset;

   public ParentForm()
   {
   //logic that populates dataset
   }

   Button_Click(object sender, EventArgs e)
   {
       DependentOnDataSetForm dependent = new DependentOnDataSetForm(dataset);
   }
}

伪代码:这是一种依赖于同一数据集的表单。

public partial class DependentOnDataSetForm : Form
{
   private DataSet dataset;

   public DependentOnDataSetForm (DataSet dataset)
   {
      this.dataset = dataset;
   }

   // Another from that depends on the same dataset.
   Button_Click(object sender, EventArgs e)
   {
       DependentOnDataSetForm2 dependent = new DependentOnDataSetForm2(dataset);
   }
}

奖金问题:(不适用于我目前的情况,但很高兴知道以供将来参考)。

创建多个仅负责某些表单所需的某些数据的DataSet.xsd文件是一个好/坏的主意。例如(纯粹假设):假设我有一个负责填写订单的订单服务,这个特定的服务需要访问订单表,客户表,发货表等。所以创建一个仅包含的.xsd文件需要的表是个好主意?

3 个答案:

答案 0 :(得分:0)

  1. 数据集仅在使用表或DataAdapter上的Fill()填充时才会命中数据库。
  2. 值得存储数据缓存的单个实例(实际上是DataSet)。当然,如果你不介意额外注意更新。 DataSet通常用于GUI数据绑定,需要记住,无论这个DataSet发生什么变化 - 都应该在UI线程中发生。

答案 1 :(得分:0)

对问题#1的回答是否定的。 DataSet对象被视为ADO.NET断开连接的对象。因此它没有命中数据库。您可以使用ADO Connected对象(即DataAdapter)的结果实例化DataSet,但DataSet本身不会连接到数据库。

我会选择选项2但要注意它是一个参考对象,一种形式的变化可能会影响另一种形式。

答案 2 :(得分:0)

完成后,您始终可以在数据集上调用Dispose()方法。然后,当您想再次使用它时,可以实例化它的新实例。