首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

内存释放,读了10万行记录,现在关闭窗体后内存依旧占用。解决思路

2012-06-15 
内存释放,读了10万行记录,现在关闭窗体后内存依旧占用。C# code/// summary/// 概述:释放当前查询结果。如

内存释放,读了10万行记录,现在关闭窗体后内存依旧占用。

C# code
        /// <summary>        /// 概述:释放当前查询结果。如果该查询结果没有放置于全局变量,应当【using】。        /// </summary>        public void Dispose()        {            if (!this._isDisposed)            {                this.OnDisposing();                (this._result as IDisposable).TryDispose();                this._exception = null;                if (this._command != null)                {                    this._command.Connection.TryDispose();                    this._command.Connection = null;                    this._command.Dispose();                }                this._isDisposed = true;            }        }


这是释放资源的源代码。我想,我是不是还缺点什么?(this._result是一个DataTable)
一开始启动的时候,是10M,然后 登录+ 权限 验证进去后飙升到20M,
接着,我打开包含10W条记录的表到一个新窗体的grid上。内存飙升到60M-70M左右。
可是当我关闭后,内存依旧占用着。
等到我再次打开,内存继续上升(第二次大约90M,第三次大约120M)……
加上

C# code
                GC.Collect();                GC.WaitForPendingFinalizers();

仍然没有效果。

以前很少注意这点,今天忽然关注了一下, 发现自己遗漏了非常可怕的东西……
不敢怠慢,赶紧求解……

[解决办法]
DataTable 占用资源直接关闭窗口,很容易释放的。 是否用到其它非托管资源了?
[解决办法]
public void Dispose()
所处的位置 是否与 其它全局变量 处一同级 影响资源回收


[解决办法]
数据量很大,分页获取数据
检查程序是否需要优化
多使用using,sqldatareader,释放资源

[解决办法]
完成后调用这个实施 
 public void Close()
{
if (mycon.State == ConnectionState.Open)
{
mycon.Close();
mycon.Dispose();
}
}
[解决办法]
先帮你 顶,吃饭去了。
[解决办法]
探讨
解决了。但不知道是不是有效解决办法。

[解决办法]
情况比较复杂哦,楼主分享下解决办法吧,学习学习
[解决办法]
have you solve problem ?
congratulate you .
[解决办法]
不是这里的问题,是你调用的位置在占用内存
[解决办法]
你的DataTable被窗体引用了,你的窗体被外面引用了,不删除引用无法释放内存
[解决办法]
代码不全,不易调试。写得太复杂了,说不出准确原因。

编程思路可以优化:
(1)托管代码下,.NET的基础类,不用特殊处理。人工回收不一定比系统自动回收机制性能更好,可能更差。多余的程序代码只会增加维护成本。
(2)按照面向对象的编程思想,尽量不要用静态类,尽量不要用全局变量。
(3)系统设计,尽量减少层次,不是层次越多越好,而是越少越好。
按照这种思想,改一下代码许多问题可能自动消失了,有问题也是发生在局部,很容易维护。

资源回收用在真正需要用代码回收的地方,如非托管类调用,第三方控件。

热点排行