Tag: dispose

entity framework – 在部署实体对象上下文后加载引用密钥

我正在使用ASP.Net / WebForms / Entity Model / Framework 3.5 这是我的项目的简单结构Forms> BLL> DAL(使用实体模型) 这是我的DAL的片段 public class MyDAL : IDisposable { private MyEntities db; public BaseDAL() { db = new MyEntities(); } public User GetUserByID(int userId) { try { IQueryable objUser = null; objUser = from res in db.Users where res.UserId == userId select res; return objUser.FirstOrDefault(); […]

C#Dispose:处置时和处理它

我在处理和最终确定之间陷入了困境。 这是我的示例代码: public class Car:IDisposable { public string name; public Car() { name = “My Car”; } public void Dispose() { Console.WriteLine(“This object has been disposed”); } } public static void Main() { Car anotherCar; using (var car = new Car()) { anotherCar = car; Console.WriteLine(“Before dispose. Name is: “+anotherCar.name); } Console.WriteLine(“After dispose. Name is: […]

在C#或方法中使用语句会更好吗? 这适用于外部(COM)对象吗?

什么是更好的,using指令,或者在完成对象时使用dispose指令? using(FileStream fileStream = new FileStream( “logs/myapp.log”, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { using(StreamReader streamReader = new StreamReader(fileStream)) { this.textBoxLogs.Text = streamReader.ReadToEnd(); } } 另一方面,当我正在处理System.Net.Mail时,我被告知我需要对象的Dispose()来释放任何杂散锁。 有没有一致的指导? 在给定对象的给定情况下,如何判断哪些更合适?

具有IDisposable且没有IDisposable的内存释放

在我的应用程序中,我有一个大的对象,每隔几秒就创建一次,我做了一些工作然后我不再需要它了。 我在任务管理器中看到,即使我没有对象的ant引用,ram大小也会上升,并且需要收集它。 我试图实现IDisposable,然后ram不断下降。 为什么是这样? 我不做GC.Collect我只是释放对象并告诉GC他不需要为我的对象调用终结器? 更新 这是我在IDIsposable对象中使用的代码: public void Dispose() { base.Dispose(); Dispoe(true); GC.SuppressFinalize(); } private void Dispoe(bool disposing) { //here i release unmanaged resources if (disposing) { //here i release all managed resources } } ~MyObject() { Dispose(false); } 在我的大对象中,我做了myObject.Dispose(); 在我不再需要他之后。 我的问题不是关于如何实现IDisposable,而是关于GC代的工作。 我只是想知道如何可能的情况之间的公羊大小差异的情况我做Dispoe我的对象情况我不会Dispoe我的对象。

从表单清除对象,何时何地?

我有一个简单的Windows窗体应用程序。 在表单上我有一个自定义类,它有自己的Dispose方法。 所以问题是我什么时候应该这样称呼? FormClosed事件(即Form1_FormClosed)是否正确执行此操作? 或者我应该为表单编写自定义Dispose方法? 奖励积分:一旦关闭,可以重新开放吗? (显然,如果它可以,FormClosed是错误的方式去!) 谢谢。

Async Disposable.Create

Disposable.Create需要Action作为参数。 在处理Rx订阅时运行Action 。 在处理Rx订阅时,我想运行一些异步清理代码,但是使用带有Action async () =>与async void相同,我想避免使用它。 有关我为什么要避免这种情况的详细信息,请参阅此处 。 是否可以创建类似Disposable.AsyncCreate东西,它接受Func而不是Action 。 如果是这样,我应该如何将它作为CompositeDisposable一部分使用? 还是有其他模式来处理异步处置?

.NET 3.5 Dispose注册表项

我有以下代码: RegistryKey installKey = Registry.LocalMachine.OpenSubKey(installKey); 我在我的代码上运行静态分析工具,它给了我一个缺陷,说我从方法返回而没有处理installKey 。 我知道您可以在.NET 4.0或更高版本的RegistryKey上调用Dispose(),但我的代码在.NET 3.5上运行。 有没有人知道处理这个RegistryKey并让我的静态分析工具满意的最佳方法?

棘手的IDisposable问题

我正在尝试抽象/封装以下代码,因此所有客户端调用都不需要重复此代码。 例如,这是一个从视图模型(MVVM)到WCF服务的调用: using (var channelFactory = new WcfChannelFactory(new NetTcpBinding())) { var endpointAddress = ConfigurationManager.AppSettings[“prestoServiceAddress”]; IPrestoService prestoService = channelFactory.CreateChannel(new EndpointAddress(endpointAddress)); this.Applications = new ObservableCollection(prestoService.GetAllApplications().ToList()); } 我最初的重构尝试是这样做: public static class PrestoWcf { public static IPrestoService PrestoService { get { using (var channelFactory = new WcfChannelFactory(new NetTcpBinding())) { var endpointAddress = ConfigurationManager.AppSettings[“prestoServiceAddress”]; return channelFactory.CreateChannel(new EndpointAddress(endpointAddress)); } } } […]

当它成为孤儿时如何处理一个对象(比如一个位图)?

我有一个A类,为其他类B,C等提供位图。 现在,A类将其位图保存在一个环形队列中,所以一段时间后它将失去对位图的引用。 虽然它仍然在队列中,但是可以通过几个类检查相同的Bitmap,这样B和C都可以保存对同一个Bitmap的引用。 但也可能只有其中一个检出Bitmap,甚至没有检查过Bitmap。 当A,B或C不再需要位图时,我想处理它。 我想我必须让B和C负责在他们使用它时以某种方式发出信号,但我不确定整体逻辑。 它应该调用DisposeIfNowOrphan()之类的东西,在这个例子中,它会被调用三次: 1 – 当位图在A类中被踢出队列时 2 – B完成时 3 – 当C完成它时 如果这是最好的策略,我该如何评估孤儿状态? 任何建议都是最受欢迎的。

类析构函数问题

我正在创建一个包含StreamWrite的简单类 class Logger { private StreamWriter sw; private DateTime LastTime; public Logger(string filename) { LastTime = DateTime.Now; sw = new StreamWriter(filename); } public void Write(string s) { sw.WriteLine((DateTime.Now-LastTime).Ticks/10000+”:”+ s); LastTime = DateTime.Now; } public void Flush() { sw.Flush(); } ~Logger() { sw.Close();//Raises Exception! } } 但是当我在析构函数中关闭此StreamWriter时,它会引发StreamWriter已被删除的exception? 为什么? 以及如何使其工作,以便在删除Logger类时,StreamWriter在删除之前关闭? 谢谢!