在做一个udp实时传输大量数据的项目。从UDP接收到数据后写人DataTable,每满4000行就用sqlbulkcopy写入数据库,数据库中有4个表。存入4000万条数据后引发类型为“System.OutOfMemoryException”的异常 int RowsCount = 0;
DataTable dt1 = new DataTable();
DataTable dt2 = new DataTable();
DataTable dt3 = new DataTable();
DataTable dt4 = new DataTable();
while (true)
{
try
{
.......//向dt中写入一行数据
RowsCount = InsertRows(0, dt1);//四个表每次写人行数是一样的
if (RowsCount == 4000)
{
using (conn = new SqlConnection(connStr))
{
conn.Open();
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn))
{
bulkCopy.BatchSize = 10000;
bulkCopy.DestinationTableName = newTableName1;
bulkCopy.WriteToServer(dt1);
bulkCopy.DestinationTableName = newTableName2;
bulkCopy.WriteToServer(dt2);
bulkCopy.DestinationTableName = newTableName3;
bulkCopy.WriteToServer(dt3);
bulkCopy.DestinationTableName = newTableName4;
bulkCopy.WriteToServer(dt4);
}
}
dt1.Clear();
dt2.Clear();
dt3.Clear();
dt4.Clear();
}
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
DataTable dt1 = new DataTable();
DataTable dt2 = new DataTable();
DataTable dt3 = new DataTable();
DataTable dt4 = new DataTable();
while (true)
{
try
{
.......//向dt中写入一行数据
RowsCount = InsertRows(0, dt1);//四个表每次写人行数是一样的
if (RowsCount == 4000)
{
using (conn = new SqlConnection(connStr))
{
conn.Open();
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn))
{
bulkCopy.BatchSize = 10000;
bulkCopy.DestinationTableName = newTableName1;
bulkCopy.WriteToServer(dt1);
bulkCopy.DestinationTableName = newTableName2;
bulkCopy.WriteToServer(dt2);
bulkCopy.DestinationTableName = newTableName3;
bulkCopy.WriteToServer(dt3);
bulkCopy.DestinationTableName = newTableName4;
bulkCopy.WriteToServer(dt4);
}
}
dt1.Clear();
dt2.Clear();
dt3.Clear();
dt4.Clear();
}
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货