我对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文件的文件所需的表一个好主意?
最佳答案
问题1的答案为否。 DataSet对象被视为ADO.NET断开连接的对象。因此,它不会访问数据库。您可以使用ADO Connected对象(即DataAdapter)的结果实例化DataSet,但是DataSet本身不连接到数据库。
我会选择选项2,但要知道它是一个参考对象,更改一种形式可能会影响另一种形式。
关于c# - 数据集在Winforms应用程序中在内存中保留多长时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7001720/