10996|23

82

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

痛苦的wince内存问题,哪位请帮忙想想办法 [复制链接]

我在用net cf开发时发现Show或ShowDialog一个form后,用close或Dispose关闭这个窗口,如果再开,再关,这样重复内存会不停的减少,不会回收,直到用尽,除非退出整个程序才能释放掉内存.

于是我为了测这个问题干脆新建项目,里面只有两个窗口
一个窗口上放一个按钮
按钮事件内打开另一窗口.
Form1 f1 = new Form1();
f1.ShowDialog();
反复打开关闭另一个窗口n次后内存也会用尽.

后来用vc写了个类似功能的程序,也是这样只会减少,不会回收,除非退出整个程序.

哪个大侠帮我看看怎么会这样,怎么解决,被折磨的不行了

最新回复

问题似乎还是没有得到解决,不知道谁有好方法?联系告知,谢谢:QQ22673717  详情 回复 发表于 2010-4-9 18:06
点赞 关注

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你用 new 分配内存后,一定要用delete 释放,不然就一直消耗下去哦
具体的话,你可以响应窗口的WM_DESTROY消息,在该函数内

void CTestDlg::OnDestroy()
{
  CDialog::OnDestroy();
  delete this;       
}
试试看!
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
你不用 delete f1;
吗?
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

4
 
或者重载PostNcDestroy函数
void CTestDlg::PostNcDestroy()
{
  CDialog::PostNcDestroy();
  delete this;
}
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

5
 
new 一定要与 delete对应。
malloc 一定要与 free对应。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

6
 
C# 的话是不用delete的
VC 的话就要delete
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

7
 
C#的话即使是DISPOSE也是不会所有都去掉的.得等下一次内存回收.
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

8
 
是c#所以不用delete
关键是等不到下次内存回收就爆了
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 3 楼 THCNC 的回复:
或者重载PostNcDestroy函数
void CTestDlg::PostNcDestroy()
{
  CDialog::PostNcDestroy();
  delete this;
}



VC的我也有一份,且看我代码
对话框
void COutMemDlg::OnBnClickedButton1()
{
        COpenDialog cd;
        cd.DoModal();

}

然后在COpenDialog重载

void COpenDialog::PostNcDestroy()
{
        // TODO: 在此添加专用代码和/或调用基类

        CDialog::PostNcDestroy();
        delete this;
}

这样也是一样的情况,每打开关闭几十次后内存就减少一点.

后来我写了个循环
void COutMemDlg::OnBnClickedButton1()
{
        for(int i = 0;i < 2000;i ++)
        {
                COpenDialog cd;
                cd.DoModal();
        }
}

在COpenDialog 加入

void COpenDialog::OnTimer(UINT_PTR nIDEvent)
{
        OnOK();
        CDialog::OnTimer(nIDEvent);
}


2000次后减掉很多内存.且不回收
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

10
 
明显的是同样测试程序,VC比C#减的少很多慢很多.但总体上是越来越少, 在实际的应用中对话框上会有很多输入项,选项之类的,这样用户反复打开录入对话框,很快便报内存不够了
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

11
 
Form1 f1 = new Form1();
定义在按钮外试试
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

12
 
COpenDialog 里是不是new了什么东西没有delete
应该还是lz代码的问题
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 8 楼 code8086 的回复:
引用 3 楼 THCNC 的回复:
或者重载PostNcDestroy函数
void CTestDlg::PostNcDestroy()
{
  CDialog::PostNcDestroy();
  delete this;
}



VC的我也有一份,且看我代码
对话框
void COutMemDlg::OnBnClickedButton1()
{
COpenDialog cd;
cd.DoModal();

}

然后在COpenDialog重载

void COpenDialog::PostNcDestroy()
{
// TODO: 在此添加专用代码和/或调用基类

CDialog::PostN…


你用DoModal的方式就不用delete了

我让你delete this 是因为看到你用的
Form1 f1 = new Form1();
方式,所以才需要delete this;

仔细检查你的代码,是不是对话框的类里面有用到了很多new啊,malloc啊之类的,有的话,一定要在不用后释放掉
new 一定要与 delete对应。
malloc 一定要与 free对应。

 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

14
 
没有别的代码,是新建的工程,所以改动的代码都贴在上头了.
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

15
 

又是mfc啊??都忘了。

模式dialog需要用PostNcDestroy吗?

你把修改过的构造和析构函数都贴出看看。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

16
 
wince,C#下的内存也会越来越少的,怎么释放?
今天出现N次OutOfMemoryException错误。。。。。。。。。。。。。。。。怎么办啊
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

17
 

学习
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

18
 
Form1 f1 = new Form1();
f1.ShowDialog();

f1=null;//垃圾回收只会加收没有任何引用的对像
System.GC.Collect();
我是这相处理的,但效果不明显
楼主有找到更好的方法可以和我交流一下
ppc应用程序工程师
qq:41797878
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

19
 


顶!

我也顺便打个广告,本人也有支持ESRI ARCGIS的.shp文件的地图的Windows mobile 5.0/6.0手机GIS地图软件----GPS移动GIS(GPSMobileGIS),PC端的服务软件----移动GIS服务平台(GPSMobileGISServer),可成套出售,可以完成以下功能:
1,通过GPRS上网连接后台服务端程序来实时传输在户外工作采集的数据到后台数据库!

2,可以实时发回PDA的GPS信息,在后台地图上直接定位PDA用户的位置,也可以下发PDA的经纬度信息让PDA用户定位和跟踪其它PDA用户,了解自己与其它PDA的位置关系,起到定位和跟踪的作用!

3,可以发回PDA当前所在地名如在天河城附近等,实现在外面工作就知道在何时何地上班打卡的效果,同时可以在后台为相应的PDA用户设置固定时长返回一次当前位置的GPS信息确保对相应PDA用户的定位,跟踪与监控!

4,移动GIS服务平台可以对PDA用户进行登记,注销等管理,在移动GIS服务平台登记的PDA用户才可登陆此服务器,依据IMSI和IMEI号来进行登陆验证,安全可靠,

5,可以对在外面工作的PDA用户进行任务指派和任务管理如
   PDA号码:13800138000
   任务名称:测试线路
   任务说明:主要是在天河北路一带的电力设施进行检测!

6,(此功能为信息采集的核心功能)用户可自行设置需要采集信息的对象及其属性,指派给指定的PDA用户,如测试电路的属性模板:
    //0-编辑属性(可多个) ; 1-下拉属性(可多个) ; 2-选择属性(可多个) ; 3-大文本编辑框(可以没有此属性,但有此属性时只能有一个) ; 4-列表属性(可以没有此属性,但有此属性时只能有一个)(属性0+属性1+属性2/2+属性2%2)<=28
    name,名称,0,;beproject,所属项目,0,;type,类型,1,0:小-1:中-2:大;complete,完成,2,;remark,备注,3,;listbox,设备表,4,

7,可以实时上传文件到后台服务器,实时下载后台服务器的文件和实时更新PDA上客户端的系统!

8,可以实时采集和传输图像信息!

跟据您的需要,还可以增加其它功能!

可以应用在以下系统:
     1、PDA移动办公如户外,异地打卡,上班;
     2、GIS林业资源监控系统;
     3、GIS电力巡检系统等;
     4、GIS通信资源如移动,联通,电信的管线资源巡检系统等!

QQ:546046182
EMail:wang921718@tom.com

 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

20
 
引用 18 楼 wang921718 的回复:
该回复于2008-11-14 11:37:53被版主删除


楼主,你兼职是欠扁啊。狂发广告,多回几个技术问题吧
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表