非常郁闷,使用Oracle提供的OracleBulkInsert会内存泄漏吗? 本帖最后由 niss 于 2012-11-01 18:13:49 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 仅仅是测试的demo,没有多线程,只拿了一个600多兆的文本文件来测试,不管是每次读两万还是每次读两千,情况都一样,内存一直往上涨,涨到接近200M,时间花了超过100秒,我郁闷了,有这么慢吗 datatable的数据就是存放在内存中的 好像是Clear方法只清除DataTable中的行,但是DataTable的表结构还在的。清除内存是Dispose方法。再等下其他高手看看。 关注中,我是这样想的,600多M的文件,你一次性读到内存中放在DataTable中,必然会消耗很多内存,建议将文件分割成多个小文件,然后分批导入。也就是说,一次性读的数据太多必然导致内存消耗很大 我是用StreamReader读的,每次读两万条,然后上传,处理完毕后DataTable.Clear(),清空,再读,如此循环,按理说不应该啊,而且文件大小是60多M 555,SqlBulkCopy很平稳,我日他仙人板板哟,Oracle能给力点不 写了个类实现IDataReader,SqlBulkCopy无问题,明天去试试OracleBulkCopy是否还是内存泄漏,要逼疯了,或者是因为某些dll没有引用才导致? 你就不能用 dataTable, 他是内存啊,你用 DataReader啊, 简单方式using System.Data.OracleClient;private void Test(){OracleDataReader oreader ; try { using(OracleConnection conn = new OracleConnection ("DBConnectionsString")) { OracleCommand cmd = OracleCommand("SELECT * FROM TBNAME WHERE 0=.............."); conn.Open(); oreader = cmd.ExecuteDataReader(); while(oreader.Read()) { string name = !(oreader["name"] is DbNull)?oreader["name"]:null; //其他一样。 } } } finaliy { if(!oreader.IsClose) { oreader.Close(); } }} 已确定OracleBulkCopy存在严重的内存泄漏问题,我写了个类实现IDataReader,用于从文件流式读入数据,在SqlBulkCopy下内存一点都不涨,维持在10多M的水平,但OracleBulkCopy涨到300多M,严重情况报DMA(记不得是MDA还是啥,反正是和硬件存取有关)错误,痛苦啊 我也遇到此问题。我是导入sqlserver发现 内存一次性读datatable太大会溢出,分批次又突出不了SqlBulkCopy 速度。能加qq331224655 分享一下 你的 IDataReader 怎么实现的吗 关键点是SchemaTable,这个作为参数传入,这样大部分的接口都可以被很快实现,至于SchemaTable怎么实现,直接从数据库读出DestinationTableName的SchemaTable就行啦 求教“异常处理”的两个问题? 寻求C#.net书 net2005问题 该字符串未被识别为有效的字符串 急急!~ 关于Kill C#foreach的疑问 菜鸟问题:请教ProgressBar控件的用法 怎么分析系统结构以及数据库,我的开发环境是c#,数据库是sql2005 请问winform中几个textbox,如保对齐 三层结构问题~~~~100分 不够在加~~~~一定要搞懂它~ 代码的合并 发布网站的问题 WinForm项目打包微软报表出错
清除内存是Dispose方法。再等下其他高手看看。
{OracleDataReader oreader ;
try
{
using(OracleConnection conn = new OracleConnection ("DBConnectionsString"))
{
OracleCommand cmd = OracleCommand("SELECT * FROM TBNAME WHERE 0=..............");
conn.Open();
oreader = cmd.ExecuteDataReader();
while(oreader.Read())
{
string name = !(oreader["name"] is DbNull)?oreader["name"]:null;
//其他一样。
}
}
}
finaliy
{
if(!oreader.IsClose)
{
oreader.Close();
}
}
}
我是导入sqlserver
发现 内存一次性读datatable太大会溢出,分批次又突出不了SqlBulkCopy 速度。
能加qq331224655 分享一下 你的 IDataReader 怎么实现的吗