首页 新闻 会员 周边 捐助

静态单例中打开的资源能被GC吗?

0
悬赏园豆:30 [已关闭问题]

网上有这样一种说法:如果一个实例中有个成员变量是static 类型,那么这个实例是不会被GC的。

我的问题是:

在一个单例模式中有一个方法来打开资源, 需要用到图片资源的对象通过这个单例中的OpenResource方法来得到ImageSource等资源, 这样打开的资源在能被GC吗?

代码逻辑如下:

 

public class ResourceLoader
{
private static ResourceLoader instance = new ResourceLoader();
private object locker = new object();

public static ResourceLoader Instance
{
get
{
return instance;
}
}
private ResourceLoader()
{

}

public T OpenResource<T>(Uri pathUri)
// where T : DependencyObject
{
// logic code.
}



}

        
问题补充: 我自己写了个测试的例子。 经过测试发现不管是不是静态实例读取的资源,当资源不再使用的时候都能被GC的。
痴鸟的主页 痴鸟 | 初学一级 | 园豆:150
提问于:2009-11-03 15:36
< >
分享
其他回答(2)
0

我的理解是,静态变量在逻辑上是中断的,也就是说它是可以独立存在的,而GC都是基于一定的逻辑分析判断出该内存数据是否还会被使用到,所以它也就无法判断静态变量是否还会被使用,因此不能被GC!完毕。

 

纯属个人理解,欢迎拍砖!

dege301 | 园豆:2825 (老鸟四级) | 2009-11-03 16:06
0

ResourceLoader 被加载的时候创建,程序结束销毁。

Mr雨 | 园豆:1199 (小虾三级) | 2009-11-03 17:27
0

GC 的条件是

  • 手动调用 Dispose() 或者
  • 没有任何对象引用该对象。
Doho | 园豆:262 (菜鸟二级) | 2009-11-05 18:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册