2011-08-09 22 views
2

我有一個關於Windows窗體應用程序中的數據集的問題。數據集在WinForms應用程序的內存中保留多長時間

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文件中的文件需要的表是一個好主意?

+0

請創建單獨的問題。否則,你的問題對社區來說不是很有用,因爲搜索變得更困難。 –

回答

0

對問題#1的回答是否定的。一個DataSet對象被認爲是一個ADO.NET斷開的對象。因此它不會觸及數據庫。您可以使用ADO連接對象(即DataAdapter)的結果實例化DataSet,但DataSet本身不連接到數據庫。

我會選擇選項2,但請注意它是一個參考對象,並且一種形式的更改可能會影響另一個。

0
  1. 數據集僅當通過在表或DataAdapter上使用Fill()填充時纔會觸及DB。
  2. 值得存儲一個數據緩存的實例(實際上是DataSet)。當然,如果你不介意對更新進行額外的處理。 DataSet通常用於GUI數據綁定,需要記住的是,無論此DataSet發生什麼變化 - 這些都應該在UI線程中發生。
0

完成處理後,您可以隨時在數據集上調用Dispose()方法。然後當你想再次使用它時,你可以實例化一個新的實例。

相關問題