提问人:Tomingsun 提问时间:11/16/2023 更新时间:11/16/2023 访问量:43
Properties.Resources 是否返回新对象
Does Properties.Resources returns a new object
问:
在这个回答中,汉斯·帕桑特提到:
Project > Properties > Resources 在这个故事中是值得注意的。它提供了非常方便的语法,可以在程序中使用位图资源。但这很危险,几乎没有人意识到,每次他们在代码中使用 Properties.Resources.Somename 时,他们都会得到一个必须释放的全新 Bitmap 对象。
但是检查内部实现,我发现是这样的:ResourceManager.GetObject
// namespace System.Resources.ResourceSet
private object GetObjectInternal(string name)
{
if (name == null)
{
throw new ArgumentNullException("name");
}
Hashtable table = Table;
if (table == null)
{
throw new ObjectDisposedException(null, Environment.GetResourceString("ObjectDisposed_ResourceSet"));
}
return table[name];
}
我怀疑这里缓存了资源,这与汉斯所说的恰恰相反。Hashtable
我的问题是:
- 每次都返回一个全新的对象吗?
Properties.Resources.Somename
- 即便如此,GC 仍将处理不再使用的对象。只要我没有足够快地获取占用内存的对象,我想这不会有问题吗?
Disposable
Properties.Resourses
答:
2赞
Tomingsun
11/16/2023
#1
对这个问题投反对票是合理的,我只想澄清一下:
- Hans 是对的,它确实返回了一个全新的对象。
- 忽略我在问题中发布的内容,GC并且没有必要的关系。
IDisposable
评论
IDisposable
Finalizer
IDisposable