草庐IT

应急处置

全部标签

c# - 处置后调用 MemoryStream.ToArray() 是否危险?

在下面的代码中,GC是否有可能清除MemoryStream以便ToArray失败,因为它在using语句之外?privatestaticbyte[]getBytes(){MemoryStreamms=null;using(ms=newMemoryStream()){//...}returnms.ToArray();} 最佳答案 不,这不可能。这样做是安全的-MemoryStream保持对字节数组的强引用。我会看看是否可以找到任何关于保证的文档...编辑:有点……来自MemoryStream.Close:Thebufferisstil

c# - 处置时不带变量的 using 语句有何作用?

我一直使用usingwith变量和赋值。现在我有这样一个DbProviderConnection类:publicclassDbProviderConnection:IDisposable{publicDbConnectionConnection{get;set;}publicDbTransactionTransaction{get;set;}publicDbTransactionBeginTransaction(){Transaction=Connection.BeginTransaction();returnTransaction;}//...andsoon}现在我想像这样使用它:u

c# - 处置 StringBuilder 对象

如何有效地处理StringBuilder对象?如果用户一次生成多个报告,我的应用程序最终会使用大量内存。我在一些在线网站上看到以下内容可能会有所帮助:StringBuildersb=newStringBuilder(1000000);//loopgoeshereaddinglotsofstufftosbexampleObject.Text=sb.ToString();sb.Length=0;最后一行真的有用吗?还有其他处理方法吗?注意:这并没有真正阻止我的用户继续使用该应用程序。我只是想知道是否有避免冗余内存使用的方法。 最佳答案

c# - Ninject 和 DataContext 处置

我正在使用Ninject从内核中检索我的DataContext,我想知道Ninject是否会自动处理DataContext,或者他如何处理dispose()行为。根据我自己的经验,我知道处理数据上下文非常重要,无论何时创建DataContext的直接对象(如:newDataContext()),都应该使用using()block。因此我的问题是:当我从内核中检索我的DataContext时,我是否仍然必须使用using()block?或者Ninject会帮我解决这个问题吗? 最佳答案 我正在为我的同事Bas调查此事。我正在查看Nin

c# - 处置 ThreadLocal<IDisposable> 中保存的元素的正确方法是什么?

当您使用ThreadLocal时和T实现了IDisposable,您应该如何处理ThreadLocal中持有的成员?根据ILSpy,ThreadLocal的Dispose()和Dispose(bool)方法是publicvoidDispose(){this.Dispose(true);GC.SuppressFinalize(this);}protectedvirtualvoidDispose(booldisposing){intcurrentInstanceIndex=this.m_currentInstanceIndex;if(currentInstanceIndex>-1&&Int

c# - 谁处置 IDisposable 公共(public)属性(property)?

如果我有一个实现了IDisposable的SomeDisposableObject类:classSomeDisposableObject:IDisposable{publicvoidDispose(){//Dosomeimportantdisposalwork.}}我还有另一个名为AContainer的类,它有一个SomeDisposableObject的实例作为公共(public)属性:classAContainer{SomeDisposableObjectm_someObject=newSomeDisposableObject();publicSomeDisposableObjec

c# - 处置与处置( bool )

我对处置感到困惑。我正在尝试让我的代码正确处理资源。所以我一直在将我的类设置为IDisposable(使用Dispose方法),确保调用Dispose方法。但现在FXCop告诉我很多关于disposing=false和调用Dispose(false)的事情。我没有看到采用bool值的Dispose方法。我需要做一个吗?如果是这样,为什么?为什么不只拥有一个在处理时调用的方法?我在这里看到了一些代码:CA1063:ImplementIDisposablecorrectly-MicrosoftDocs这显示了如何制作一个采用bool的Dispose方法。它说它适用于native资源与托管资

c# - "using"关键字是否意味着对象已被处置并被 GC 处理?

我今天和我的同事进行了交谈,她说她刚刚了解了使用using语句的原因。//Usingkeywordisusedtocleanupresourcesthatrequiredisposal(IDisposableinterface).using(StreamReaderreader=newStreamReader(@"C:\test.txt")){stringline=reader.ReadLine();}我指出该对象被标记为“可以被处置”但实际上并没有被处置和垃圾收集,除非GC决定这样做。她回答说,一旦using语句结束,对象将被自动释放,因为using语句被转换为try-catch-f

c# - 我是否需要考虑处置我使用的任何 IEnumerable<T>?

最近有人向我指出各种Linq扩展方法(例如Where、Select等)返回一个IEnumerable。这也恰好是IDisposable.以下评估为Truenewint[2]{0,1}.Select(x=>x*2)isIDisposable我需要处理Where的结果吗?表达?每当我调用返回IEnumerable的方法时,我是否(可能)承担在完成处理后调用dispose的责任? 最佳答案 不,你不需要担心这个。他们返回IDisposable的事实implementation是一个实现细节-这是因为C#编译器的Microsoft实现中的迭

c# - 完成与处置

为什么有些人使用Finalize方法而不是Dispose方法?在什么情况下,您会在Dispose方法上使用Finalize方法,反之亦然? 最佳答案 终结器方法在您的对象被垃圾回收时调用,您无法保证何时会发生这种情况(您可以强制执行,但这会损害性能)。另一方面,Dispose方法旨在由创建您的类的代码调用,以便您可以清理并释放您获得的任何资源(非托管数据、数据库连接、文件句柄等)在代码完成您的对象的那一刻。标准做法是实现IDisposable和Dispose以便您可以在using语句中使用您的对象。例如using(varfoo=ne