调用webservice接口时,发现内存会持续不断的增长并且GC根本不能回收,导致内存溢

2024-11-20 04:52:04
推荐回答(1个)
回答1:

对内存管理要求比较高的的项目,为什么要用.net做?为什么不考虑用C/C++呢另外一个角度,你对内存进行如此频繁的申请和释放,为什么不考虑同一块内存复用?//----------补充的回答-------------------我不知道你的应用是什么,不太清楚你的程序的具体运行过程。1、并发占用内存的机会有多大?就是说,你一次要申请很大的内存,这个操作,是有时间先后顺序的吗,还是有可能是并发申请的?如果同一时刻,只有一块大内存正在被使用,那么,你为什么不申请一块足够大的内存,来重复使用呢?如果同一时刻,有多块大内存正在被使用,那么,这个并发数量,有没有一定的上限呢?如果有,也可以考虑做一个大内存块池,比如一块最大需要100M,同时并发数量为10。你完全可以设计一个最大允许申请10个100M的内存块池,而不是让GC或者Windows的内存管理器来如此频繁的申请和释放。2、如果每次申请的内存大小差异很大,那估计你要添加一些稍微复杂的算法来管理你的这个申请和释放问题。有一些算法,是专门用来管理程序的内存使用的,可以在网上找一资料参考一下。3、如果有精力,也可以研究一下GC是如何工作的,用工具看看它的实现源码,看看有没有能够利用的地方。//-------------再次补充--------------------------就算是大小由第三方数据来决定,也不能没有一个限制。系统资源毕竟是有限的,在有限的资源上面,做无限的事,那肯定是要想法才行。1、你这数据究竟是从哪里来的?网络传送过来的么?2、由于实在太大的数据处理,而内存又不够大的话,那没法,我们不能无限制的扩充内存,那么,能考虑使用分块处理么?