|
1
1
为IntPtr编写包装器当然可以。但是,如果只要该项存储在字典中,内存就应该保持有效,这是没有必要的。如果是这样的话,那么如果您创建自己的目录(当从字典中删除某个项时,该目录会自动释放内存),那么在客户端代码上就容易多了。客户机不需要为每个项调用Dispose(),这总是一个优势。
为此,从
AllocTaskMem是更好的分配器,顺便说一句,它没有遗留的包袱。 |
|
|
2
1
最好将完整的Dispose/Finalizer模式添加到包含集合的类中,并让它遍历字典和清理。 或者为HGlobal编写带有终结器的包装器。 |
|
|
3
1
一种方法是将线程代码放在try/finally块中,让finally块释放内存,这样如果线程崩溃(我想你的意思是抛出异常?),finally块将确保内存被释放。 如果您在Dispose方法中释放内存,则自定义SafeHandle会有所帮助,但要使其正常工作,您需要在线程崩溃之前从字典中删除该项,以便不再通过字典引用SafeHandle。否则,只有当字典被释放时,内存才会被释放,这取决于你对字典本身的终生管理。 WeakReference ,不过,如果可以的话,我建议将SafeHandle与try/finally结合使用。 |
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |