问题描述
c#windowform开发的。。占用物理内存到不大,但是虚拟内存占用过大,虚拟内存使用到1G多的时候程序就卡死以及报“Outofmemory“”。请问,通过什么方法解决?要么通过什么方法释放虚拟内存呢?
解决方案
解决方案二:
考虑如何释放内存,而不是如何释放虚拟内存
解决方案三:
这是你的windows系统设置的问题。贴出你的电脑的分页文件大小设置,截个屏来看看!
解决方案四:
有的时候,虽然windows系统的分页文件大小设置足够(例如16G),但是用户可能胡乱修改了系统用户对系统文件的访问权限,那么就是人祸。此时就只能重装windows系统。所以不要动不动就去修改windows权限。少听那些谣言。
解决方案五:
对于程序来讲,才没有什么物理内存、虚拟内存的概念呢所以你应该说究竟是什么原因导致outofmemory
解决方案六:
虚拟内存。不就是为了弥补物理内存的不足从磁盘划分一块保存页面文件麽。C#不是号称托管内存的麽。内存换页是操作系统级的吧。合理使用和释放内存/加大内存
解决方案七:
必要时可以手动释放内存。GC.Collect()
解决方案八:
建议从程序本身找找问题,一般这种问题在程序长时间运行,申请的内存得不到释放导致的。特别是关于数据库连接,流对象的使用等,用完后没能及时释放,导致内存不断攀升。
解决方案九:
另外监测下你的程序内存使用情况,如果升至1G到2G,程序很可能就会报错这种错误
解决方案十:
▷▷▷▷▷[ErrorSystemMomory:RAM使用状况]◁◁◁◁◁1.1TotalPhysicalMemory:3,772MB1.2FreePhysicalMemory:1,247MB2.1TotalPageFileSize:3,772MB2.2FreeSpaceinPageFile:3,454MB3.1TotalVirtualMemory:2,047MB3.2FreeVirtualMemory:852MB4.SystemDiskFreeSize:231,704MB5.processMemoryUseSize:157MB6.详细内容:PrivateMemorySize64:249MB==>PagedMemorySize64:249MB==>PeakPagedMemorySize64:299MB==>WorkingSet64:157MB==>PeakWorkingSet64:208MB==>PeakVirtualMemorySize64:1,370MB==>VirtualMemorySize64:1,195MB==>
解决方案十一:
上面是报错的时候,使用状况收集的。TotalPhysicalMemory:3,772MB(总物理内存)1.2FreePhysicalMemory:1,247MB==》还剩的不少5.processMemoryUseSize:157MB==》我的程序占用内存量系统是64位Windows7professional,分页文件是默认的,大概7G多。。
解决方案十二:
引用7楼wjkaola123的回复:
建议从程序本身找找问题,一般这种问题在程序长时间运行,申请的内存得不到释放导致的。特别是关于数据库连接,流对象的使用等,用完后没能及时释放,导致内存不断攀升。
同意
解决方案十三:
及时释放不用的资源
解决方案十四:
引用12楼xuzuning的回复:
及时释放不用的资源
5.processMemoryUseSize:157MB不用的资源内存释放做处理了。但关于虚拟内存是好像c#是无法控制。有没有别的方法解决问题呢?请大家帮忙。。
解决方案十五:
按照我的理解虚拟内存就是所谓的交换区,操作系统会将物理内存中暂时不活动的内存块转移到硬盘上的交换区,以腾出更多的物理内存供活动进程使用通常程序在申请内存时,都是申请一段连续的内存空间。如果物理内存不够时,就可能被申请到了交换区(虚拟内存)所以,你可以考虑适当减少单个容器的数据规模,而代之以多个容器
解决方案:
引用14楼xuzuning的回复:
按照我的理解虚拟内存就是所谓的交换区,操作系统会将物理内存中暂时不活动的内存块转移到硬盘上的交换区,以腾出更多的物理内存供活动进程使用通常程序在申请内存时,都是申请一段连续的内存空间。如果物理内存不够时,就可能被申请到了交换区(虚拟内存)所以,你可以考虑适当减少单个容器的数据规模,而代之以多个容器
PeakVirtualMemorySize64:1,370MB==>系统分配该应用程序1,370MB???VirtualMemorySize64:1,195MB==>现在正使用的虚拟内存。比如这个时候因发生别的事件,500Mb数据移到虚拟内存时,1195+500>1370虚拟内存最大值(PeakVirtualMemorySize64),我理解的对吗?
解决方案:
是这个意思不过当发生交换时,最小的计量单位是页操作系统不同,内存页的大小也不同
解决方案:
别人在程序中为了释放内存,使用以上方法来释放内存。物理内存到控制的很好,但是虚拟内存一直攀升,也不会释放不用的cache...有没有办法,把PeakVirtualMemorySize64最大值提高,或者释放虚拟内存中不用的数据?
解决方案:
再帮帮忙吧
解决方案:
程序应该写得有问题,导致内存无法释放使用工具软件,查看是什么对象占用内存