日期:2014-05-17  浏览次数:20739 次

这样写会影响内存吗?
本菜写了一个服务,每五分钟执行一次,遇到了如下的问题:
执行的这个方法大概如下:
void Fun()
{
   while(true)
   {
       MyClass a=new MyClass();
       a.b();
   }
}
我的问题就是,每过五分钟就要new一个MyClass,这个实例会自动释放吗?会不会一直耗着内存?析构函数是在什么时候执行的?
asp.net C#

------解决方案--------------------
一般情况没事的,因为.net会自动回收一些垃圾东西,不过不建议,可以尝试下用静态变量,不需要每次都实例化
------解决方案--------------------
那你可以定时调用对象的Dispose()方法(前提是MyClass实现IDisposable接口),并把引用设置为null,弄个静态的全局集合保存你实例化出来的对象,定时清空,调用Dispose()后 对象不会立即被释放,这个取决于CLR,是自动的,但是调用Dispose()的对象在下次垃圾回收的时候会被释放,析构函数也在此时执行
------解决方案--------------------
优先利用对象的可复用性。如果说性能很关键,那么只能说创建对象是个耗时操作。还有如#2说的 对象确实要释放的时候设置成null吧 ,保证一定能会回收。至于主动调用Dispose(),如果对象占用的资源比较大,那么建议;不过占用资源不大,那么不建议主动调用。