C# 写的一个程序 越运行占用内存越多
选出一段代码 看内存占用 望高手指点
前端数字代表debug运行下 停在此段代码时该EXE内存的使用量 既运行到此处是使用了多少内存
为使查看清楚 从ACCESS中取出数据后 从DataTable中清除
37772K DataTable dt = new DataTable(tableName);
try
{
37792K _oleDbCommand.CommandText = _oleDbCommandText;
37796K OleDbDataAdapter oleDbAdapter = new OleDbDataAdapter(_oleDbCommand);
37800K oleDbAdapter.Fill(dt);
99780K oleDbAdapter.Dispose();
99476K oleDbAdapter = null;
}
catch (Exception ex)
{
throw ex;
}
99476K dt.Clear();
99476K dt.Dispose();
99492K dt = null;
99492K GC.Collect();
62575K return dt;
从进入此方法 到出此方法 所有对象全部释放掉 但是丢失了248000K的内存
这只是一角
为什么呢?数据库联接方式
_oleDbConnString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=;";
选出一段代码 看内存占用 望高手指点
前端数字代表debug运行下 停在此段代码时该EXE内存的使用量 既运行到此处是使用了多少内存
为使查看清楚 从ACCESS中取出数据后 从DataTable中清除
37772K DataTable dt = new DataTable(tableName);
try
{
37792K _oleDbCommand.CommandText = _oleDbCommandText;
37796K OleDbDataAdapter oleDbAdapter = new OleDbDataAdapter(_oleDbCommand);
37800K oleDbAdapter.Fill(dt);
99780K oleDbAdapter.Dispose();
99476K oleDbAdapter = null;
}
catch (Exception ex)
{
throw ex;
}
99476K dt.Clear();
99476K dt.Dispose();
99492K dt = null;
99492K GC.Collect();
62575K return dt;
从进入此方法 到出此方法 所有对象全部释放掉 但是丢失了248000K的内存
这只是一角
为什么呢?数据库联接方式
_oleDbConnString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=;";
解决方案 »
- form间传值问题
- 求如何在C/S中使用客户端模拟多个连接,连接某个服务器上的webservice
- 关于 tabcontrol 问题
- 球操作 picture里面怎么画图
- c# comboBox 重复添加数据问题
- menu_click和menuitem_click有冲突吗?
- 请教try ...catch的问题,为什么正常的语句也总是有异常?
- 100分求解,不够再加!郁闷啊!根目录问题,已经两天了还没人回答
- 那个可以提供用attirbute来实现o/r mapping 的最简单例子 谢谢了
- c#怎么创建指定名字的文件夹?
- 我执行存储过程就提示错误,将参数值从 SqlParameter 转换到 String 失败。
- 关于C#线程问题,请大虾们帮忙解决
这句出现在try{},如果出现异常是可能不会被执行的。
)
这样可能好一些
To:zhoufoxcn
不出现异常的时候一样不行
现在不需要考虑异常的情况
MSDN 中对于DataAdapte的解释是这样的:
DataAdapter 虽然仅使用所请求的记录来填充目标DataTable,但仍会使用返回整个查询的资源。
你是否在把oleDbAdapter.Fill(dt),填充数据表后,应该断开与ACCESS数据库的连接,你试下这样能否减低系统内存占用。对于丢失感觉LS说的是对的,如果一直在丢那就真有问题了。
finally{
//里面用于清空所有对象
}
DataAdapter 虽然仅使用所请求的记录来填充目标DataTable,但仍会使用返回整个查询的资源。
你是否在把oleDbAdapter.Fill(dt),填充数据表后,应该断开与ACCESS数据库的连接,你试下这样能否减低系统内存占用。对于丢失感觉LS说的是对的,如果一直在丢那就真有问题了。
还有调用完GC后,它不会马上回收,没准是Table还没释放的过
C#里看有没有内存泄露要取时间段平均值,单看一个方法看不出来。