在winforms应用程序中,数据集在内存中保留多长时间?

本文关键字:长时间 保留 数据集 winforms 应用程序 内存 | 更新日期: 2023-09-27 18:05:16

我有一个关于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);
   }
}

附加问题:(不适用于我目前的情况,但知道以后参考很好)

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

在winforms应用程序中,数据集在内存中保留多长时间?

问题1的答案是否定的。DataSet对象被认为是ADO。NET断开连接的对象。因此,它不会击中数据库。你可以用ADO连接对象(即DataAdapter)的结果实例化一个数据集,但数据集本身不连接到数据库。

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

  1. 数据集只有在表或数据适配器上使用Fill()填充时才会命中DB。
  2. 值得存储数据缓存的单个实例(DataSet实际上是)。当然,如果你不介意对更新多加注意的话。数据集经常用于GUI数据绑定,需要记住的是,无论这个数据集发生了什么变化-这些都应该发生在UI线程中。

处理完数据集后,总是可以调用Dispose()方法。然后,当您想再次使用它时,您可以实例化它的新实例。