optimering dataset eller oracledatareader
jeg har en metode:private void finalWrite(OracleCommand cmd,string tableTitle)
{
tableNameStr = tableTitle;
logTime = DateTime.Now.ToString();
builder = new StringBuilder();
int count=0;
string manipulate="";
int size = 0;
int diff=0;
try
{
if(oraConn.State != ConnectionState.Open)
{
open();
}
OracleDataReader oReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
for(int i=0;i<dataSetDef.Tables[0].Rows.Count;i++)
{
long tmp = 0;
tmp = GC.GetTotalMemory(false);
System.Diagnostics.Debug.Write("mem: " + tmp);
if(tableTitle.Equals(dataSetDef.Tables[0].Rows[i]["TABELTITEL"].ToString()))
{
while(oReader.Read())
{
while(count < oReader.FieldCount)
{
if(count == 0)
{
size = int.Parse(dataSetDef.Tables[0].Rows[i+count]["LENGTH"].ToString());
manipulate = oReader.GetValue(count).ToString();
manipulate = convertToLatinAndRemove(manipulate);
diff = (size-manipulate.Length);
if(diff != 0)
{
manipulate = manipulate.PadLeft(size,'0');
diff=0;
builder.Append(manipulate);
manipulate="";
count++;
}
else
{
builder.Append(manipulate);
manipulate="";
count++;
}
}
else
{
if(count > 0)
{
if(dataSetDef.Tables[0].Rows[i+count]["DATATYPE"].ToString().Equals("DATE"))
{
dateSplit = oReader.GetValue(count).ToString();
manipulate = dateSetup(dateSplit);
builder.Append(manipulate);
manipulate="";
count++;
}
else
{
if(!(size.ToString().Equals(dataSetDef.Tables[0].Rows[count]["LENGTH"].ToString())))
{
size = int.Parse(dataSetDef.Tables[0].Rows[i+count]["LENGTH"].ToString());
}
if(size > 2048)
{
manipulate = oReader.GetValue(count).ToString();
manipulate = convertToLatinAndRemove(manipulate);
if(manipulate.Length > 2048)
{
//System.Diagnostics.Debug.WriteLine(manipulate.Length);
manipulate = truncate(manipulate);
char[] split = new char[] {';'};
foreach(string newStr in manipulate.Split(split))
{
if(newStr.Length == 2048)
{
builder.Append(newStr);
}
else
{
size = newStr.Length;
builder.Append(newStr);
}
}
//builder.Append(manipulate);
//System.Diagnostics.Debug.WriteLine(manipulate.Length);
manipulate ="";
count++;
}
else
{
manipulate = manipulate.PadRight(size,' ');
builder.Append(manipulate);
manipulate = "";
count++;
}
}
if(size <= 2048)
{
manipulate = oReader.GetValue(count).ToString();
manipulate = convertToLatinAndRemove(manipulate);
diff = (size-manipulate.Length);
if(diff != 0)
{
manipulate = manipulate.PadRight(size,' ');
diff = 0;
builder.Append(manipulate);
manipulate = "";
count++;
}
else
{
builder.Append(manipulate);
manipulate="";
count++;
}
if(count == oReader.FieldCount)
{
count = 0;
break;
}
}
}
}
}
}
}
}
}
oReader.Dispose();
removeSpecialChar(builder);
}
der skal gøre en masse med de opslysningerne den får. tabletitle parameteren fortæller hvilken tabel vi befinder os i. cmd fås som select * from tabeltitle. er der nogen måde at optimere hukommelses forbruget, eventuelt ved at bruge dataset? og i hvis det er tilfældet hvordan? det er store databaser jeg arbejder op imod (>25gb).
