我写了一些服务来创建数据库,在数据库或表之间复制一些记录等,这么多的数据库操作。但我正在处理记忆问题。其中之一:
我正在使用存储程序获取记录并填写实体列表;
public List<FpBatteryEntity> LoadFPBattery()
{
List<FpBatteryEntity> retVal = new List<FpBatteryEntity>();
DataSet dataSet = _dataAccessProvider.ExecuteSPDataSet("sp_fp_battery", null);
if (dataSet != null && dataSet.HasData())
{
DataTable requestsTable = dataSet.Tables[0];
if (requestsTable != null && requestsTable.HasData())
{
foreach (DataRow row in requestsTable.Rows)
{
FpBatteryEntity entity = new FpBatteryEntity()
{
Faceplate = row["tf_faceplate"],
Battery = row["tf_battery"]
};
retVal.Add(entity);
}
}
}
return retVal;
}
然后对于列表中的每个实体,执行一个新的sp;
public bool LoadFPBattery(List<FpBatteryEntity> entityList)
{
foreach (var entity in entityList)
{
DBParameterCollection parameters = new DBParameterCollection
{
new DBParameter("@faceplate", SqlDbType.VarChar, entity.Faceplate),
new DBParameter("@battery", SqlDbType.VarChar, entity.Battery)
};
_dataAccessProvider.ExecuteSPNonQuery("sp_ins_fp_battery", parameters);
}
return true;
}
不幸的是,我有 30 多个这样的操作,其中一些正在处理数千条记录。
调用这样的步骤;
.....
List<MapColorEntity> mapColor = _dbRepository.LoadMapColor(marketId);
if (!_otherDbRepository.LoadMapColor(mapColor))
return false;
List<AttributesEntity> attributes = _dbRepository.LoadOptionAttrib(marketId);
if (!_otherDbRepository.LoadOptionAttrib(OptionAttributes))
return false;
List<FpBatteryEntity> fpBattery = _dbRepository.LoadFPBattery();
if (!_otherDbRepository.DelFPBattery())
return false;
if (!_otherDbRepository.LoadFPBattery(fpBattery))
return false;
.....
在 5-6 步操作后,由于“内存不足”错误而损坏。我必须一步一步地进行这些操作。只是想知道您是否有建议使这些操作更加富有成效和顺利。我该如何解决这个内存问题?后面会发生什么?
用法;
Windows 7 操作系统、3Gb 可用内存、Sybase ASE、Odbc 驱动程序