c# – 当它成为孤儿时如何处理一个对象(比如一个位图)?
作者:互联网
我有一个A类,为其他类B,C等提供位图.
现在,A类将其位图保存在一个环形队列中,所以一段时间后它将失去对位图的引用.
虽然它仍然在队列中,但是可以通过几个类检查相同的Bitmap,因此,例如,B和C都可以保存对同一个Bitmap的引用.但也可能只有其中一个检出了Bitmap,甚至没有检查过Bitmap.
当A,B或C不再需要时,我想处理位图.
我想我必须让B和C负责在他们使用它时以某种方式发出信号,但我不确定整体逻辑.
它是否应该调用DisposeIfNowOrphan()之类的东西,在这个例子中,它将被调用三次:
1 – 当位图在A类中被踢出队列时
2 – 当B完成它时
3 – 当C完成时
如果这是最好的策略,我该如何评估孤儿状态?
任何建议都是最受欢迎的.
解决方法:
让A类直接提供包装类而不是位图.包装类应该实现IDisposable本身,并可用于维护计数器.每个消费者都可以获得引用相同Bitmap的自己的包装器. A类保留所有位图和所有包装器的陷阱.在A类中使用WeakReference来跟踪包装器,因此如果消费者不调用dispose,它将获得GC并且提供者可以知道它不再被引用.
标签:c,dispose,orphaned-objects,shared-objects 来源: https://codeday.me/bug/20190607/1191236.html