考虑以下对象
class someObject;
{
public objectA A{get;set;}
public objectB B{get;set;}
public objectC C{get;set;}
public objectD D{get;set;}
//...
}
Run Code Online (Sandbox Code Playgroud)
在某些时候ObjectD,不再需要,但实例someObject仍然存在,并会为几个小时这样做,objectD占用了很多的内存,以便以后它的作用是做我没有将它设置为null.
ObjectD一旦我将其设置为null ,内存将被释放?所以我的项目中有一个包含所有业务逻辑的服务层.它是一个MVC项目,因此当用户调用需要某些逻辑的页面时,将实例化服务类,然后使用(来自控制器).但它不会再次使用,因为新请求将再次实例化一个新对象.
我应该在使用它们之后处理这些服务类(使用'using'语句吗?或者我不会从中获得任何好处,因为垃圾收集器反过来不会太晚了?如果是这种情况,同样适用于使用我想我的存储库对象.
我怎么能故意溢出我的记忆,强迫垃圾收集?有人可以提出这样的算法:
while ( garbage collector starts ) {
overflow my memory with something easily disposable
}
Run Code Online (Sandbox Code Playgroud)
编辑:给所有使用GC.Collect方法的人.我一直都认为,GC不能强制以程序化的方式发生.猜猜,我错了.谢谢你的回答.
我用这种方式在C#中声明了一个数组:
public ushort[][] pixels16;
Run Code Online (Sandbox Code Playgroud)
然后我用500个图像的像素数据填充它,数组中的每个元素包含262144个项目.问题是,在我使用它之后变得太大所以我需要摆脱它以释放内存..我怎么能这样做?
我正在使用SharpDX用C#编写游戏......所以,对于绘制一个帧,目前我正在使用一个Timer,间隔设置为1; 但这对游戏来说太慢了,所以我想要更快的东西...首先,如果我使用另一个线程进行游戏(另一个用于Window本身)并使用"[while(InGame)]"声明,它很快,但GC永远不会释放单个对象,并且内存使用率只会上升......
如果我使用内置"RenderLoop"功能的SharpDX,它也很快,但GC仍然没有做任何事情......
我试图覆盖Window窗体"WndProc"功能,但游戏只刷新自己然后我像疯子一样移动鼠标......
这是我的第一个真正的游戏,有很多功能,所以如果你们有任何想法,我将如何解决它,或者我应该使用什么,我会很感激...窗体表格生命周期中必须有一些东西像一个
void FormLife
{
WndProc();
HandleEvents();
etc...
}
Run Code Online (Sandbox Code Playgroud)
(这只是一个很难的例子......)
或者我怎么能强迫GC在while(InGame)状态结束时完成它的工作呢?我已经尝试GC.Collect();但它不起作用......