以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  内存——狐表的致命问题,准备入手狐表的慎重了  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=90589)

--  作者:yjf123
--  发布时间:2016/9/17 18:47:00
--  内存——狐表的致命问题,准备入手狐表的慎重了

狐表开发的软件,在使用过程中,内存会不断增加,不会释放内存。

只要操作次数达到一定次数系统就会崩溃(如果数据加载多一些,一天会闪退好几次。)

具体原因已经找到:窗口中有绑定到数据表的控件,关闭该窗口不会释放内存。

之前已发帖,也有例子:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=89101&authorid=0&page=0&star=1

 

狐爸提供的方法:根本无法解决,执行下面代码会马上释放内存,但操作后内存又马上回来,系统依然崩溃,纯粹自欺欺人。

 System.Diagnostics.Process.GetCurrentProcess().MinWorkingSet = new System.IntPtr(5)

 

实在是这个问题太严重,导致系统无法继续使用,才写这样的标题,希望引起注意!

[此贴子已经被作者于2016/9/17 18:48:24编辑过]

--  作者:hbhb
--  发布时间:2016/9/17 18:59:00
--  
表控件也如此吗?那可不得了。
--  作者:鲁吉
--  发布时间:2016/9/17 19:50:00
--  
网上搜来的:
让.NET程序快速释放内存的办法
[DllImport("kernel32.dll")]
        public static extern bool SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);

public static void GarbageCollect()
        {
            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();
        }

        public static void FlushMemory()
        {
            GarbageCollect();

            if (Environment.OSVersion.Platform == PlatformID.Win32NT)
            {
                Win32.SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
            }
        }

NET里面还有一个类可以达到这个效果
   System.Diagnostics.Process.GetCurrentProcess().MinWorkingSet = new System.IntPtr(5);

采用定时释放+窗体打开的时候,效果很好,估计程序占的内存会在20以下

--  作者:hanxuntx
--  发布时间:2016/9/18 8:24:00
--  
还好吧。
--  作者:blackzhu
--  发布时间:2016/9/18 9:07:00
--  
 这个倒是没有留意,但是我的系统用了6-7年,没有发现崩溃现象呀.
--  作者:jspta
--  发布时间:2016/9/18 9:49:00
--  
内存占用大小,这个主要看你的数据加载量。一般也就在150m以下,连续使用软件一个月不退出的也没有崩溃,不过会有可能出现其他莫名的代码问题。这种BUG基本可以忽略了,懒得去深究了。
--  作者:狐狸爸爸
--  发布时间:2016/9/18 10:36:00
--  
我这个论坛,以前是windows 2003+sql server 2005, 4G内存,很稳定。

我后来搬到阿里云,换成windows 2008+sql server 2008,还是4g内存,一开始论坛每天会崩溃一两次,每次重启服务器才能恢复正常,很快发现是内存问题,如是我增加到8g内存,结果还是会崩溃。

实在没办法,后来我只能设置了一下,IIS的应用程序池每天自动回收4次,SQL server每天自动重启3次(分别在6:00,12:30和18:30),总算没问题了。

我不是否定问题,我的意思是pc和andriod都多少都会这样,就是微软自己的服务端软件有时也这一样,可能苹果的ios会完美一点。
这没多年了,Foxtable在上万的企业用户中使用了,并不存在不稳定的问题。
可能你的情况比较特殊,在有彻底解决办法之前,建议:
如果你的窗口比较大,要频繁打开和关闭窗口,而且要长时间不关闭,那就做个计划,定时提醒客户重启foxtable吧,或者定期检查剩余内存,低于一定程度就提示用户重启。
或者改变一下设计思路,常用窗口打开后就不再关闭,之后只是显示和隐藏。
[此贴子已经被作者于2016/9/18 13:32:30编辑过]

--  作者:xiaoohoo
--  发布时间:2016/9/18 10:43:00
--  
事实胜于雄辨,例子证明内存的确会上升。
等会再用VS试一下。


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20160918104227.png
图片点击可在新窗口打开查看


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目4.foxdb



--  作者:bahamute
--  发布时间:2016/9/18 12:00:00
--  
从狐表出现一直用到现在,还真没遇到过楼主这种情况,数据量特别大以应该考虑分批加载。
--  作者:Hopenight
--  发布时间:2016/9/18 15:24:00
--  

.Net的内存管理一般情况下是由框架自动管理的。一个对象从被销毁到对应内存空间被回收,是有一定时间间隔的。

这个框架已经被大量应用于实践中了。如果有这样的问题,肯定早就被发现了,每天好多人在帮助测试咧