jjzjj

idisposable

全部标签

c# - 仅针对托管资源的最小 IDisposable implimenation

关于处理非托管资源的“标准完整”IDisposable实现有很多信息-但实际上这种情况(非常)罕见(大多数资源已经被托管类包装).这个问题侧重于针对更常见的“仅限托管资源”情况的IDisposable的最小实现。1:下面代码中IDisposable的最小实现是否正确,是否存在问题?2:是否有任何理由添加完整的标准IDisposable实现(Dispose()、Dispose(bool)、Finalizer等)超过所呈现的最小实现?3:在这种最小情况下,使Dispose虚拟化(因为我们不提供Dispose(bool))是否可行/明智?4:如果这个最小的实现被一个完整的标准实现替换,包括一

c# - 模拟 DataReader 并获取 Rhino.Mocks.Exceptions.ExpectationViolationException : IDisposable. Dispose();预期#0,实际#1

我正在尝试模拟一个SqlDataReaderSqlDataReaderreader=mocks.CreateMock();Expect.Call(reader.Read()).Return(true).Repeat.Times(1);Expect.Call(reader.Read()).Return(false);Expect.Call(reader.HasRows).Return(true);Expect.Call(reader.Dispose);Expect.Call(reader["City"]).Return("Boise");Expect.Call(reader["State

c# - IDisposable 的享元和工厂问题

我似乎陷入了享元模式的困境。首先,假设我有一个一次性类型DisposableFiddle和一个工厂FiddleFactory:publicinterfaceDisposableFiddle:IDisposable{//ImplementsIDisposable}publicclassFiddleFactory{publicDisposableFiddleCreateFiddle(SomethingThatDifferentiatesFiddless){//returnsanewlycreatedfiddle.}}然后,在我看来,对于FiddleFactory的客户来说,工厂并不声称拥有

c# - 在 Using block 中调用 Environment.Exit()

如果我有一个代码如下的控制台应用程序:using(DisposableObjectobject=newDisposableObject()){if(acondition)Environment.Exit(0);//DoStuff}我的元素会被妥善处置吗?还是线程在对象被清理之前就死了? 最佳答案 您的应用程序将终止,所有托管内存将在此时释放。生成的finallyblock不会执行,所以任何Dispose方法都不会被调用,所以任何非托管资源都不会被释放。参见Don'tBlindlyCountonaFinalizer.

c# - 检测 "leaked"IDisposable 对象

有很多问题询问如何检测IDisposable对象泄漏。答案似乎是"youcan't".我刚刚检查了最简单的测试用例,FxCop10.0不执行此操作,带有MSVS2010的ReSharper4不执行此操作。这对我来说似乎是错误的,比C中的内存泄漏更糟糕(至少我们已经建立了检测工具)。我在想:是否有可能,使用反射和其他晦涩的高级技术,我可以在运行时注入(inject)一个检查,在终结器中查看是否调用了Dispose?用WinDBG+SOS变魔术怎么样?即使没有现成的工具可以做到这一点,我也想知道这在理论上是否可行(我的C#不是很熟练)。想法?注意这个问题的标题可能具有误导性。这里真正的问题

c# - 是否有必要将 usings 与 IDisposable 对象嵌套在一起?

我是否必须将所有IDisposable对象包装在using(){}语句中,即使我只是将一个对象传递给另一个对象?例如,在下面的方法中:publicstaticstringReadResponse(HttpWebResponseresponse){stringresp=null;using(StreamresponseStream=response.GetResponseStream()){using(StreamReaderresponseReader=newStreamReader(responseStream)){resp=responseReader.ReadToEnd();}}

c# - IDisposable GC.SuppressFinalize(this) 位置

我为我的代码使用默认的IDisposable实现模板(模式)。片段:publicvoidDispose(){Dispose(true);GC.SuppressFinalize(this);}protectedvirtualvoidDispose(boolisDisposing){if(!this.disposed){if(isDisposing){//cleanupmanagedresources}//cleanupunmanagedresourcesthis.disposed=true;}}我的问题:为什么在Dispose公共(public)方法中调用“GC.SuppressFina

c# - 处理问题

我有许多类具有实现IDisposable的私有(private)成员变量(计时器、画笔等)。我是否需要采取任何措施来确保.NETFramework正确清理这些变量?我看到的文献是指“托管资源”与“非托管资源”。这些术语让我感到困惑,因为您可以拥有一个使用非托管资源实现功能的托管类。这被认为是“非托管资源”还是“托管资源”?我的理解是,如果您不在实现IDisposable的对象上调用Dispose(),那么在应用程序退出之前不会释放资源。这种情况在长时间运行程序时会导致OutOfMemory异常。我如何确定我的代码正确地处理了资源管理?这对这些对象很重要,因为它们是自定义控件,并且可能有

c# - 在 C# 中正确使用 IntPtr

我认为我理解IntPtr的用法,尽管我真的不确定。我从MSDN复制了IDisposable模式只是为了看看我能从中得到什么,虽然我大部分都理解它,但我不知道如何正确实现IntPtr,甚至不知道它应该是什么“指向”或引用。最重要的是,我什至不知道如何将整数、字符串、字符、double等分配或转换为IntPtr以从中创建指针。此外,IntPtr是否需要使用不安全的代码?无论如何,这里有一些代码只是为了描绘我正在谈论的内容:namespaceUtilities{classDisposer:IDisposable{privateIntPtrhandle;privateComponentcomp

c# - 误报 : Fix this implementation of IDisposable to conform to the dispose pattern

我的类实现了IDisposable并遵循了的模式publicvoidDispose(){Dispose(true);GC.SuppressFinalize(this);}但sonar仍然告诉我需要实现处置模式...https://sonarqube.com/issues#issues=AVtsPLjmtpYg8Dj4z0MU这是Sonar的缺陷还是我遗漏了什么? 最佳答案 我看到你已经解决了这个问题,但如果其他人有同样的问题,我会详细说明规则要求。这条规则的想法是允许潜在的派生类正确地处理你的类的成员。因此,如果您的类是密封的,则该