Tag: using statement

从’using’块中调用’return’时会发生什么?

如果我有一个像这样的使用块的方法… public IEnumerable GetPersons() { using (var context = new linqAssignmentsDataContext()) { return context.Persons.Where(p => p.LastName.Contans(“dahl”)); } } …从using块中返回值,IDisposable对象是否仍然处理?

“使用”语句中的exception,WCF没有正确关闭连接。 如何关闭故障WCF客户端连接或具有exception的连接?

关于关闭WCF连接的StackOverflow有几个问题,但排名最高的答案是指这个博客: http://marcgravell.blogspot.com/2008/11/dontdontuse-using.html 当我在服务器上设置断点并让客户端挂起超过一分钟时,我遇到了这种技术的问题。 (我故意创建超时exception) 问题是客户端似乎“挂起”,直到服务器完成处理。 我的猜测是,一切都在exception后被清理干净。 关于TimeOutException ,似乎客户端的retry()逻辑将继续一遍又一遍地重新提交查询到服务器,在那里我可以看到服务器端调试器对请求进行排队,然后同时执行每个排队请求 。 我的代码不希望WCF这样做,可能是我看到的数据损坏问题的原因。 有些东西并没有完全加入这个解决方案。 什么是在WCF代理中处理故障和exception的无所不包的现代方法?

.NET / C# – 使用’using’语句处理对象

假设我有一个这样的方法: public byte[] GetThoseBytes() { using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) { ms.WriteByte(1); ms.WriteByte(2); return ms.ToArray(); } } 这还会处理’ms’对象吗? 我有疑问, 可能是因为在语句块完成之前返回了一些内容。 谢谢,AJ。

使用语句中的HttpClient导致任务被取消

我为我的api调用创建了一个FileResult : IHttpActionResult webapi返回类型。 FileResult从另一个URL下载文件,然后将流返回给客户端。 最初我的代码有一个如下所示的using语句: public async Task ExecuteAsync(CancellationToken cancellationToken) { try { HttpResponseMessage response; using (var httpClient = new HttpClient()) { response = new HttpResponseMessage(HttpStatusCode.OK) { Content = new System.Net.Http.StreamContent( await httpClient.GetStreamAsync(this.filePath)) }; } return response; } catch (WebException exception) {…} } 但是,这会间歇性地导致TaskCanceledException 。 我知道如果在异步调用完成之前处理了HttpClient,Task的状态将变为取消。 但是因为我使用了await : Content = new System.Net.Http.StreamContent(await httpClient.GetStreamAsync(this.filePath)) ,它应该阻止HttpClient在任务完成过程中被处理掉。 […]

使用对话框表单周围的语句来确保垃圾回收

我们有一个包含数千个表单的Windows窗体应用程序。 其中许多通过ShowDialog()方法临时显示为对话框。 这个应用程序已存在多年,我们发现由于表单中的各种资源泄漏或它使用的控件,许多表单没有及时收集垃圾。 具体来说,我们已经找到了未正确处理的GDI +资源的示例,尽管可能存在尚未表征的其他类型的资源泄漏。 虽然解决这个问题的正确方法显然是要经历每一种forms和每一种控制,并消除所有的资源问题。 这需要一些时间来完成。 作为一个短期的替代方案,我们发现在表单上显式调用Dispose()似乎启动了垃圾收集过程,并且表单及其资源立即被释放。 我的问题是,在一个using语句中包装每个表单的ShowDialog()块是否是一个合理的解决方法,以便在显示表单后调用Dispose(),这也是一个很好的做法吗? 例如,从以下位置更改现有代码: public void ShowMyForm() { MyForm myForm = new MyForm(); myForm.ShowDialog(); } 对此: public void ShowMyForm() { using (MyForm myForm = new MyForm()) { myForm.ShowDialog(); } } 在我们的测试中,第一个示例永远不会调用MyForm的Dispose()方法,但第二个示例会立即调用它。 当我们花时间追踪每个特定的资源问题时,这似乎是一种合理的方法作为短期解决方法吗? 我们是否可以考虑采用其他方法来确定和解决这些类型的资源问题的短期解决方法和/或方法?

我在哪里将try / catch与“using”语句放在一起?

可能重复: try / catch + using,正确的语法 我想try/catch以下内容: //write to file using (StreamWriter sw = File.AppendText(filePath)) { sw.WriteLine(message); } 我是否将try/catch块放在using语句中,或者在它周围? 或两者?

C#条件使用块语句

我有以下代码,但它很尴尬。 我怎么能更好地构建它? 我是否必须使我的消费类实现IDisposable并有条件地构建网络访问类并在完成后处置它? protected void ValidateExportDirectoryExists() { if (useNetworkAccess) { using (new Core.NetworkAccess(username, password, domain)) { CheckExportDirectoryExists(); } } else { CheckExportDirectoryExists(); } }

EF(entity framework)使用“使用”语句

我有一个关于MVC的项目。 我们为数据库交易选择了EF。 我们为BLL层创建了一些管理器。 我找到了很多例子,其中using “ using ”语句,即 public Item GetItem(long itemId) { using (var db = new MyEntities()) { return db.Items.Where(it => it.ItemId == itemId && !it.IsDeleted).FirstOrDefault(); } } 这里我们创建一个DBcontext MyEntities()的新实例。 我们使用“ using ”以“确保正确使用IDisposable对象”。 这只是我经理中的一种方法。 但我有十多个。 每当我从管理器调用任何方法时,我将使用“ using ”statemant并在内存中创建另一个DBcontext。 什么时候垃圾收集器(GC)会处理它们? 谁知道? 但是还有另一种使用管理器方法的方法。 我们创建一个全局变量: private readonly MyEntities db = new MyEntities(); 并且在没有“ using ”语句的每个方法中使用DBcontext。 方法看起来像这样: public […]

IDisposable.Dispose在使用块中的exception后永远不会被调用

我从许多这样的来源了解到,如果在Using块中抛出exception,将始终调用IDisposable的Dispose方法。 那么我有这个代码: static class MainEntryPoint { static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += HandleUnhandledException; using (var x = new Disposable()) { throw new Exception(“asdfsdf”); } } private static void HandleUnhandledException(Object sender, System.UnhandledExceptionEventArgs e) { Environment.Exit(0); } } class Disposable : IDisposable { public void Dispose() { System.Diagnostics.Debug.Print(“I am disposed”); } } 当抛出未处理的exception时,它退出应用程序。 永远不会调用Dispose方法。 为什么?

在streamwriter,streamreader 之前使用声明的好处/使用

可能重复: 什么是C#Using块,我为什么要使用它? 所以我刚才注意到在msdn示例和一些stackoverflow问题中有回答,其中using语句在streamwriter等之前使用,但实际上有什么好处呢? 因为我从未被教过/告知/读过任何使用它的理由。 using (StreamReader sr = new StreamReader(path)) { while (sr.Peek() >= 0) Console.WriteLine(sr.ReadLine()); } 代替: StreamReader sr = new StreamReader(path); while (sr.Peek() >= 0) Console.WriteLine(sr.ReadLine());