跪求WPF内存不足,无法执行该程序的解决方案,急急急!!!!!!!!

飞越成功之路 2012-09-20 08:51:30
跪求WPF内存不足,无法执行该程序的解决方案,急急急!!!!!!!!
我们用WPF做了一个自动售票机的应用程序,当运行这个程序的时候,只要该程序用到了200M的时候就会报内存不足,无法执行该程序这个异常,希望有NB的大哥帮忙看看是怎么回事,有没有解决的方法。这个机器的内存应该足够可以使用,内存是1G的,内存最高使用到800M左右;
我们用到了GC、用到了[DllImport("kernel32.dll")]
public static extern int SetProcessWorkingSetSize(IntPtr proc, int min, int max);
方法进行清理,程序进程的内存是减少了,但是虚拟内存还是没有减少;
跪求解决方案啊,。。。。。。。
...全文
1342 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞越成功之路 2012-10-15
  • 打赏
  • 举报
回复
兄弟、姐妹们,大家都过来看看啊。。。
Conmajia 2012-09-21
  • 打赏
  • 举报
回复
小孩玩刀把自己伤了,是刀的问题,还是小孩的问题?
sanguorewrite 2012-09-21
  • 打赏
  • 举报
回复
我们用WPF做一个银行的大项目呢。没啥大问题。挺好。
qldsrx 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
没有,我们的那个程序,数据量是非常小的。最多就十几条数据,只不过我们的程序要求界面美观使用的图片比较多。
[/Quote]
是图片没有释放造成的,另外我发现zanfeng是不是有病,到处说WPF的坏话,自己不喜欢没必要诋毁它,别人是在问问题,而不是宣传WPF。

WPF本身对内存的占用是比较高,特别是特效开多的话。但它的确是各非常好的界面开发工具,对于设计自定义控件非常适合。由于图片资源是非托管的,因此对于图片的释放很重要,你可以做个按钮,随时点击下,输出托管内存大小,通过GC.GetTotalMemory可得到托管内存大小,当再次提示内存不足的时候,你再看看托管堆的大小,如果托管堆并不大,说明是非托管资源的内存泄漏,如图片。
飞越成功之路 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
WPF本身就有BUG。而且很多。
放弃WPF吧。

SetProcessWorkingSetSize这个函数并不是降底内存使用率。而是让你的程序跑的更慢。具体的查MSDN。
如果你大量使用图片。先把所有的暂时隐掉再看看。
如果问题解决了,再把最常用的那个图片做一下缓冲。
因为你的程序不大。当你的程序很大时WPF会有更多问题。
[/Quote]

但是我的那个图片也不多,系统所有使用的图片加在一起也就一点几兆;
足球中国 2012-09-20
  • 打赏
  • 举报
回复
WPF本身就有BUG。而且很多。
放弃WPF吧。

SetProcessWorkingSetSize这个函数并不是降底内存使用率。而是让你的程序跑的更慢。具体的查MSDN。
如果你大量使用图片。先把所有的暂时隐掉再看看。
如果问题解决了,再把最常用的那个图片做一下缓冲。
因为你的程序不大。当你的程序很大时WPF会有更多问题。
飞越成功之路 2012-09-20
  • 打赏
  • 举报
回复
NB的大哥大姐们,都来帮忙看看吧!!!!!!!
飞越成功之路 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
内存太小了 .netframework GC 会保护内存溢出
[/Quote]

内存应该不小吧,内存是1G的,加上物理内存,可使用的内存也在2个G,该系统加上windows使用的,最高在800M。
飞越成功之路 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
是否有大量的数据残留,内存没释放,还是有严重的内存泄露
[/Quote]

没有,我们的那个程序,数据量是非常小的。最多就十几条数据,只不过我们的程序要求界面美观使用的图片比较多。
瑞卡哥哥 2012-09-20
  • 打赏
  • 举报
回复
内存太小了 .netframework GC 会保护内存溢出
bdmh 2012-09-20
  • 打赏
  • 举报
回复
是否有大量的数据残留,内存没释放,还是有严重的内存泄露
足球中国 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]

引用 16 楼 的回复:
你可以在程序运行中监视内存变化,分析是什么动作引起的,逐步缩小范围排查。
另外没遇到过内存不足导致程序无法执行的,代码中各处内存释放都做得很好,即使只有512内存也跑得欢,另外少用GC释放,禁用SetProcessWorkingSetSize,那两个副作用大于好处,具体原理就不细说了。

使用WPF的时候,只见内存增加,但不见减少。不知道是什么原因。主要是系统……
[/Quote]
楼主这个应该不会是wpf的bug。你不提供代码没有人能帮到你的。
winner2050 2012-09-20
  • 打赏
  • 举报
回复
WPF 有这个毛病,我记得同事提过他以前遇到过这个问题,导致整个项目作废了。
MuteG 2012-09-20
  • 打赏
  • 举报
回复
这是因为你的图片资源没有被释放,必须显式调用你使用过的Image类型对象的Dispose方法,否则图片资源是不会被GC自动回收掉的,因为这一部分资源是非托管的。
飞越成功之路 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]
你可以在程序运行中监视内存变化,分析是什么动作引起的,逐步缩小范围排查。
另外没遇到过内存不足导致程序无法执行的,代码中各处内存释放都做得很好,即使只有512内存也跑得欢,另外少用GC释放,禁用SetProcessWorkingSetSize,那两个副作用大于好处,具体原理就不细说了。
[/Quote]
使用WPF的时候,只见内存增加,但不见减少。不知道是什么原因。主要是系统的东西没有得到释放
qldsrx 2012-09-20
  • 打赏
  • 举报
回复
你可以在程序运行中监视内存变化,分析是什么动作引起的,逐步缩小范围排查。
另外没遇到过内存不足导致程序无法执行的,代码中各处内存释放都做得很好,即使只有512内存也跑得欢,另外少用GC释放,禁用SetProcessWorkingSetSize,那两个副作用大于好处,具体原理就不细说了。
飞越成功之路 2012-09-20
  • 打赏
  • 举报
回复
因为这是怎个程序的问题,没办法发代码啊。。。你们在做WPF的时候有没有出现过内存不足,无法执行该程序的异常。有的话是怎么解决的。。。。
足球中国 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

问题还没有解决啊,,,老是报内存不足啊。。。。。。
[/Quote]
你没贴代码咋个帮你法。...
飞越成功之路 2012-09-20
  • 打赏
  • 举报
回复
问题还没有解决啊,,,老是报内存不足啊。。。。。。
flexstruts 2012-09-20
  • 打赏
  • 举报
回复
WPF 却实有bug,而且还很多
加载更多回复(3)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧