我什么时候会在类而不是析构函数上实现IDispose?我读了thisarticle,但我仍然没有捕获要点。我的假设是,如果我在一个对象上实现IDispose,我可以明确地“破坏”它,而不是等待垃圾收集器来完成它。这是正确的吗?这是否意味着我应该始终在对象上显式调用Dispose?这有哪些常见的例子? 最佳答案 终结器(也称为析构函数)是垃圾收集(GC)的一部分-它何时(或什至是否)发生是不确定的,因为GC主要是由于内存压力(即需要更多空间)而发生的。终结器通常仅用于清理非托管资源,因为托管资源将有自己的收集/处置。因此,IDispo
我什么时候会在类而不是析构函数上实现IDispose?我读了thisarticle,但我仍然没有捕获要点。我的假设是,如果我在一个对象上实现IDispose,我可以明确地“破坏”它,而不是等待垃圾收集器来完成它。这是正确的吗?这是否意味着我应该始终在对象上显式调用Dispose?这有哪些常见的例子? 最佳答案 终结器(也称为析构函数)是垃圾收集(GC)的一部分-它何时(或什至是否)发生是不确定的,因为GC主要是由于内存压力(即需要更多空间)而发生的。终结器通常仅用于清理非托管资源,因为托管资源将有自己的收集/处置。因此,IDispo
我的根本问题是,当using在StreamWriter上调用Dispose时,它还会处理BaseStream(Close也有同样的问题。我有一个解决方法,但如您所见,它涉及复制流。有没有办法在不复制流的情况下做到这一点?这样做的目的是将一个字符串的内容(原本是从数据库中读取的)获取到一个流中,这样流就可以被第三方组件读取。注意:我无法更改第三方组件。publicSystem.IO.StreamCreateStream(stringvalue){varbaseStream=newSystem.IO.MemoryStream();varbaseCopy=newSystem.IO.Memor
我的根本问题是,当using在StreamWriter上调用Dispose时,它还会处理BaseStream(Close也有同样的问题。我有一个解决方法,但如您所见,它涉及复制流。有没有办法在不复制流的情况下做到这一点?这样做的目的是将一个字符串的内容(原本是从数据库中读取的)获取到一个流中,这样流就可以被第三方组件读取。注意:我无法更改第三方组件。publicSystem.IO.StreamCreateStream(stringvalue){varbaseStream=newSystem.IO.MemoryStream();varbaseCopy=newSystem.IO.Memor
我对CLR和GC的工作方式很着迷(我正在通过C#、JonSkeet的书籍/帖子等阅读CLR来扩展我的知识)。无论如何,这句话有什么区别:MyClassmyclass=newMyClass();myclass=null;或者,通过让MyClass实现IDisposable和析构函数并调用Dispose()?另外,如果我有一个带有using语句的代码块(例如下面),如果我单步执行代码并退出using块,那么对象是在那时还是在发生垃圾收集时被处理?如果我在using块中调用Dispose()会发生什么?using(MyDisposableObjmydispobj=newMyDisposabl
我对CLR和GC的工作方式很着迷(我正在通过C#、JonSkeet的书籍/帖子等阅读CLR来扩展我的知识)。无论如何,这句话有什么区别:MyClassmyclass=newMyClass();myclass=null;或者,通过让MyClass实现IDisposable和析构函数并调用Dispose()?另外,如果我有一个带有using语句的代码块(例如下面),如果我单步执行代码并退出using块,那么对象是在那时还是在发生垃圾收集时被处理?如果我在using块中调用Dispose()会发生什么?using(MyDisposableObjmydispobj=newMyDisposabl
我有以下代码:MemoryStreamfoo(){MemoryStreamms=newMemoryStream();//writestufftomsreturnms;}voidbar(){MemoryStreamms2=foo();//dostuffwithms2return;}我分配的MemoryStream是否有可能以后因某种原因无法处理?我有一个同行评审坚持要我手动关闭它,但我找不到信息来判断他的观点是否有效。 最佳答案 你不会泄漏任何东西——至少在当前的实现中是这样。调用Dispose不会更快地清理MemoryStream使
我有以下代码:MemoryStreamfoo(){MemoryStreamms=newMemoryStream();//writestufftomsreturnms;}voidbar(){MemoryStreamms2=foo();//dostuffwithms2return;}我分配的MemoryStream是否有可能以后因某种原因无法处理?我有一个同行评审坚持要我手动关闭它,但我找不到信息来判断他的观点是否有效。 最佳答案 你不会泄漏任何东西——至少在当前的实现中是这样。调用Dispose不会更快地清理MemoryStream使
我创建了一个自定义WPF用户控件,旨在供第三方使用。我的控件有一个私有(private)成员,它是一次性的,我想确保一旦包含的窗口/应用程序关闭,它的dispose方法将始终被调用。但是,UserControl不是一次性的。我尝试实现IDisposable接口(interface)并订阅Unloaded事件,但在主机应用程序关闭时都没有被调用。MSDN表示可能根本不会引发Unloaded事件。并且它也可能不止一次被触发,即当用户改变主题时。如果可能的话,我不想依赖我的控件的使用者记住调用特定的Dispose方法。publicpartialclassMyWpfControl:UserCo
我创建了一个自定义WPF用户控件,旨在供第三方使用。我的控件有一个私有(private)成员,它是一次性的,我想确保一旦包含的窗口/应用程序关闭,它的dispose方法将始终被调用。但是,UserControl不是一次性的。我尝试实现IDisposable接口(interface)并订阅Unloaded事件,但在主机应用程序关闭时都没有被调用。MSDN表示可能根本不会引发Unloaded事件。并且它也可能不止一次被触发,即当用户改变主题时。如果可能的话,我不想依赖我的控件的使用者记住调用特定的Dispose方法。publicpartialclassMyWpfControl:UserCo