我必須從我的數據庫獲取大量不同的記錄(1000.000)才能從此數據構建報告。我的數據庫在遠程系統上。現在我爲每個報告都有不同的sql語句。這個sql語句被髮送到服務。該服務填充DataSet並將其返回給我的應用程序。現在我可以將DataSet綁定到我的報告。 問題是具有多條記錄的DataSet具有巨大的內存消耗。我的意思是如果我加載數據的內存上升到1GB一個負載。從數據庫到代碼的大型未知數據
在沒有這種內存消耗的情況下是否可以選擇加載數據? 我的意思是我已經像使用NHibernate一樣使用ORM,但問題是我不知道將要加載的數據,有數百個報告可以更改不同的sql語句,所以我無法創建數百個類來映射...
編輯:
下面是我用我的示例代碼:
DataSet dataSet = new DataSet();
try
{
using (FbConnection connection = new FbConnection(strConnString))
{
connection.Open();
using (FbCommand cmd =
new FbCommand(
"SELECT * FROM CUSTOMERS;",
connection))
{
FbDataAdapter fbd = new FbDataAdapter(cmd);
fbd.Fill(dataSet);
// This is what the default ADO.Net provider can do..
//SqlCommand command = new SqlCommand(queryString, connection);
//System.Xml.XmlReader reader = command.ExecuteXmlReader();
}
}
}
catch (Exception ex)
{
}
該web服務僅供我的應用程序使用。我必須從數據庫加載數據,並且DataSet是實現它的唯一方法,按照我使用的firebird和ADO.Net提供程序的方式。如果我將DataSet解析爲XML或Json或其他內容,則會出現額外的性能問題。我的意思是,如果有可能直接將數據加載到XML中,那會更好,但目前爲止還沒有發現。唯一的方法是將其加載到DataSet中,然後將其寫入XML。 oroginal SQLCommand類具有類似於ExecuteXmlReader()的東西,但沒有任何此類Firebird提供者(FBCommand)。 – Franki1986
這裏有些東西...... ADO.Net的基本返回結構是* DataReader *,而不是DataSet。雖然框架提供了將DataReader讀入DataSet的方便方法,但據我所知,這是ADO.Net的用戶必須明確執行的。 –
我放了一些代碼來解釋我的意思。 – Franki1986