【问题标题】:How long does a dataset stay in memory in a winforms application数据集在 Winforms 应用程序中的内存中保留多长时间
【发布时间】:2011-10-23 12:33:00
【问题描述】:

我有一个关于 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 文件也是如此所需的表是个好主意吗?

【问题讨论】:

  • 请创建单独的问题。否则你的问题对社区没有那么有用,因为它变得更难搜索。

标签: c# winforms caching dataset


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:
      1. 数据集仅在通过对表或 DataAdapter 使用 Fill() 填充时才会命中 DB。
      2. 值得存储数据缓存的单个实例(DataSet 实际上是)。当然,如果您不介意对更新格外小心。 DataSet 通常用于 GUI 数据绑定,需要牢记的是,无论此 DataSet 发生什么变化 - 这些都应该发生在 UI 线程中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-23
        • 2011-04-21
        • 1970-01-01
        • 1970-01-01
        • 2021-11-13
        • 2012-10-18
        • 1970-01-01
        相关资源
        最近更新 更多