我们自己开发了一个中间件来实时的读取XML数据并存储到Oracle数据库中,每10分钟读取一次。每次进行读取时软件就要占用600到800多的内存,CPU也占95%左右,此时服务器(内存为2G)非常的慢。读取的每个数据文件中包含1000多条记录,写程序时是在完全读取完一个数据文件后一次性插入到数据库中,是不是和这有关系啊。在不读取数据时占用内存很少。
先谢谢啦,很急啊!!
先谢谢啦,很急啊!!
解决方案 »
- 求助!用c#编程实现对复数操作符的重载
- ListView只能单选
- [在线等]C# 线程 代码 一个窗体加载 一个窗体显示动画 出现动画卡的问题
- 如何用C#创建事件句柄传入C++写的驱动Dll?
- VB调用C#写的dll后没有C#的效果?
- c#如何将winform形式转换为WebForm形式?
- 【求救啊】数据导入搞了好多天了!没头绪,大家帮帮忙!
- 如何向Dreamweaver编辑区插入文字?
- 能再SqlDataReader 里面使用欠套函数吗?
- Color的ARGB中的A是什么意思?我只知道RGB是三原色
- 运行 dcomcnfg,打开DCOM以后双击里面任何一项都提示“操作成功完成。”,请问咋整。
- 如何将本机时间与另外的SQL SEVER 服务器时间同步?
Oracle很少用,不过我记得sql server里面有个命令:OPENROWSET可以直接将外部数据导入数据库的,而不用经过中间的dataset;这样不知道能不能减少数据数据库的压力.
请问怎么写能让内存的占有量降到最低呢?
foreach (WaveStru ws in ListWStr)
{
dRow = dTable.NewRow();
dRow[0] = ws.dblLon;
dRow[1] = ws.dblLat;
dRow[2] = ws.dblOri;
dRow[3] = ws.dblVal;
dRow[4] = ws.FV1;
dRow[5] = ws.FV2;
dRow[6] = ws.iZero;
dRow[7] = ws.iType;
dRow[8] = ws.iIntLen;
dRow[9] = ws.iFloatLen;
dRow[10] = ws.FV3;
dRow[11] = ws.FV4;
dRow[12] = ws.FV5;
dRow[13] = ws.FV6;
dRow[14] = ws.FV7;
dTable.Rows.Add(dRow);
} SqlStr = @"INSERT INTO FJ863_RADAR_WAVE(DATA_ID, LON, LAT, ORIE, VALUE, FV1, FV2,
ZERO, TYPE, INTLEN, FLOATLEN, FV3, FV4, FV5, FV6, FV7,PARA_ID)
VALUES(SEQU_RADAR_WAVE.NEXTVAL, :LON, :LAT, :ORIE, :VALUE, :FV1, :FV2,
:ZERO, :TYPE, :INTLEN, :FLOATLEN, :FV3, :FV4, :FV5, :FV6, :FV7,:SEQ_RADAR_PARA.CURRVAL)"; OleDbCommand cmd = new OleDbCommand(SqlStr, OleDbCon);
cmd.Parameters.Add("LON", OleDbType.Double, 10, "LON");
cmd.Parameters.Add("LAT", OleDbType.Double, 10, "LAT");
cmd.Parameters.Add("ORIE", OleDbType.Double, 10, "ORIE");
cmd.Parameters.Add("VALUE", OleDbType.Double, 10, "VALUE");
cmd.Parameters.Add("FV1", OleDbType.Double, 10, "FV1");
cmd.Parameters.Add("FV2", OleDbType.Double, 10, "FV2");
cmd.Parameters.Add("ZERO", OleDbType.Integer, 10, "ZERO");
cmd.Parameters.Add("TYPE", OleDbType.Integer, 10, "TYPE");
cmd.Parameters.Add("INTLEN", OleDbType.Integer, 10, "INTLEN");
cmd.Parameters.Add("FLOATLEN", OleDbType.Integer, 10, "FLOATLEN");
cmd.Parameters.Add("FV3", OleDbType.Double, 10, "FV3");
cmd.Parameters.Add("FV4", OleDbType.Double, 10, "FV4");
cmd.Parameters.Add("FV5", OleDbType.Double, 10, "FV5");
cmd.Parameters.Add("FV6", OleDbType.Double, 10, "FV6");
cmd.Parameters.Add("FV7", OleDbType.Double, 10, "FV7"); string selStr = @"SELECT * FROM FJ863_RADAR_WAVE";
OleDbDataAdapter OleAdapter = new OleDbDataAdapter(selStr, OleDbCon);
OleAdapter.InsertCommand = cmd;
OleAdapter.Fill(dTable);
OleAdapter.Update(dTable); dTable.Dispose();
cmd.Dispose();
OleAdapter.Dispose();
private void ReadCurr(string fileNameStr)
{
XmlReader reader = new XmlTextReader(fileNameStr);
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
switch (reader.LocalName)
{
case "StationData":
ReadStatData(reader);
break; case "row":
ReadCurrRowData(reader);
break; default:
break;
}
}
}
}
读取完后构造了一个表,如:
private void InitPara()
{
dTablePara = new DataTable();
dTablePara.Columns.Add("RSIZE", Type.GetType("System.Int32"));
dTablePara.Columns.Add("SNUMB", Type.GetType("System.Int32"));
dTablePara.Columns.Add("SITENAME", Type.GetType("System.String"));
dTablePara.Columns.Add("SITEINFO", Type.GetType("System.String"));
dRowPara = dTablePara.NewRow();
}
我想知道这1000多条数据的文件的大小.
还有不可以直接读吗?读完一条就保存一条.再读再保存.
而不用DataTable对象..??这样可以吗?