草庐IT

disposables

全部标签

c# - connection.Close() 和 connection.Dispose() 有什么区别?

这个问题在这里已经有了答案:CloseandDispose-whichtocall?(8个答案)关闭9年前。我注意到System.Data.SQLite中的SQLiteConnection对象拥有两个相似的方法:关闭()Dispose()SQLiteDataReader对象也是如此。有什么区别?

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# - 为什么在 main() 退出之前调用 Dispose()?

我的.net服务通过在Main()循环退出之前的finallyblock中调用resourceName.Dispose()来清理其所有非托管资源。我真的必须这样做吗?我认为我不能因为进程正在结束而泄漏任何资源的想法是否正确?Windows将关闭所有不再使用的句柄,对吗? 最佳答案 实现IDisposable的对象可以封装的资源类型没有限制。IDisposable对象封装的绝大部分资源会在进程关闭时被操作系统清理,但有些程序可能会使用操作系统不知道的资源。例如,需要底层数据库不支持的锁定模式的数据库应用程序可能会使用一个或多个表来跟踪

c# - 这个 ReSharper "Access to disposed closure"警告是否值得担心?

这不同于thisone因为在那种情况下警告是有效的。在这种情况下,根据接受的答案,警告无效。我在寻找答案时看到了那个问题,它没有回答这个问题。给定以下代码:internalListGetPaletteList(intuserId){using(varstashEntities=newStashEntities())using(varpaletteEntities=newPaletteEntities()){varpaletteList=frompaletteinpaletteEntities.PalettesfromstashinstashEntities.Stasheswherepa

c# - this.Dispose() 在关闭后不会释放 Form 使用的内存。

我有一个Windows窗体应用程序,在该应用程序中单击某些按钮可以从第二窗体创建对象。在用户关闭此第二个表单时,此表单使用的内存不会被释放(根据任务管理器)。我尝试在退出按钮上使用this.dispose(),在主代码中使用this.close(),form2=null,并尝试在处理之前通过代码清除此表单中的所有控件。这些都不起作用,每次用户单击按钮时,应用程序的内存使用量都会增加,并且不会释放前一个实例使用的内存。我应该用什么来解决这个问题? 最佳答案 调用Dispose不会清除对象使用的内存。Dispose旨在用于运行用户定义的

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的缺陷还是我遗漏了什么? 最佳答案 我看到你已经解决了这个问题,但如果其他人有同样的问题,我会详细说明规则要求。这条规则的想法是允许潜在的派生类正确地处理你的类的成员。因此,如果您的类是密封的,则该

c# - 为什么我们需要在某些对象上使用 Dispose() 方法?为什么垃圾收集器不做这项工作?

问题是:为什么我们需要在某些对象上调用Dispose()?为什么垃圾收集器在超出范围时不收集对象?我试图理解为什么它是这样实现的。我的意思是,如果在垃圾收集器收集超出范围的对象时调用Dispose()会不会更容易。 最佳答案 垃圾收集器是不确定的-它会在对象不再被引用后某个时间点收集对象,但不能保证及时发生。与引用计数相比,这有很多好处,包括允许循环依赖和不在所有地方递增和递减计数器的性能优势。但是,这确实意味着对于应该及时清理的资源(例如数据库连接、文件句柄等-几乎所有内存以外的资源),您仍然需要显式处理资源。using语句使这变

c# - 在展开嵌套的 "Dispose"语句时处理 "using"抛出的异常

显然,在使用嵌套的using语句时,一些异常可能会丢失。考虑这个简单的控制台应用程序:usingSystem;namespaceConsoleApplication{publicclassThrowing:IDisposable{intn;publicThrowing(intn){this.n=n;}publicvoidDispose(){vare=newApplicationException(String.Format("Throwing({0})",this.n));Console.WriteLine("Throw:{0}",e.Message);throwe;}}classPr

c# - MSDN Dispose() 示例错误? (何时将托管引用设置为空)

用于实现Dispose()方法的MSDN'sexamplepattern描述了将对已处置托管资源的引用设置为null(_resource=null),但在if(disposing)之外执行此操作>阻止:protectedvirtualvoidDispose(booldisposing){//Ifyouneedthreadsafety,usealockaroundthese//operations,aswellasinyourmethodsthatusetheresource.if(!_disposed){if(disposing){if(_resource!=null)_resourc

c# - SerialPort 类偶尔卡在 Dispose 上

我编写了一个.net4.0控制台应用程序,它定期与GSM调制解调器对话以获取收到的SMS消息的列表(它是一个USB调制解调器,但代码通过串行端口驱动程序连接到它并发送AT命令-顺便说一句,它是SierraWireless调制解调器,但我无法更改它,而且我有最新的驱动程序)。发生的事情是在一段时间后(可能是几小时,也许是几天)它就停止工作了。这是一个日志片段...2012-04-1723:07:31DEBUGModemCheck(108)-ExecutingATcommand'AT+CPMS="ME"'...2012-04-1723:07:31DEBUGModemCheck(108)-F