相关疑难解决方法(0)

正确使用IDisposable接口

我从阅读MSDN文档中了解到,IDisposable接口的"主要"用途是清理非托管资源.

对我来说,"非托管"意味着数据库连接,套接字,窗口句柄等等.但是,我已经看到了Dispose()实现该方法以释放托管资源的代码,这对我来说似乎是多余的,因为垃圾收集器应该照顾那对你而言.

例如:

public class MyCollection : IDisposable
{
    private List<String> _theList = new List<String>();
    private Dictionary<String, Point> _theDict = new Dictionary<String, Point>();

    // Die, clear it up! (free unmanaged resources)
    public void Dispose()
    {
        _theList.clear();
        _theDict.clear();
        _theList = null;
        _theDict = null;
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是,这是否使得垃圾收集器可以使用的内存MyCollection比通常更快?

编辑:到目前为止,人们已经发布了一些使用IDisposable清理非托管资源(例如数据库连接和位图)的好例子.但是假设_theList在上面的代码中包含了一百万个字符串,并且你想现在释放那个内存,而不是等待垃圾收集器.上面的代码会实现吗?

.net c# garbage-collection idisposable

1586
推荐指数
12
解决办法
31万
查看次数

处理问题

我有许多类具有实现IDisposable(定时器,画笔等)的私有成员变量.我是否需要做任何事情以确保.NET Framework正确清理这些变量?

我遇到的文献是指"托管资源"与"非托管资源".这些术语让我感到困惑,因为您可以拥有一个使用非托管资源实现功能的托管类.这被认为是"非托管资源"还是"托管资源"?

我的理解是,如果您没有在实现IDisposable的对象上调用Dispose(),那么在应用程序退出之前不会释放资源.在长时间运行程序时,这种情况可能会导致OutOfMemory异常.

如何确保我的代码正确处理资源管理?这对于这些对象很重要,因为它们是自定义控件,并且可能有很多绘图消耗了IDisposable资源.我尽可能使用C#using语句,但有时我需要使一个对象实现IDisposable成员变量,而using语句对我没有帮助.

.net c# dispose

11
推荐指数
2
解决办法
2522
查看次数

在System.Windows.Form派生类中处置资源的位置?

我有一个表单,在我的构造函数中创建了一些我需要处理的可支配资源.但是,C#表单设计器已在Designer.cs文件中生成一个Dispose()方法,该方法似乎没有任何类型的用户挂钩.所以我不知道我应该如何实现典型IDisposable模式.

偶尔会创建此表单但从未显示过,因此使用Close事件无济于事.

有问题的对象不是IComponents,所以我不能只是添加它们this.components.

我在哪里可以放置这个清理代码,并确保它在表单处理时运行?

c# idisposable

5
推荐指数
1
解决办法
2171
查看次数

.designer文件未与Visual Studio中的.cs文件关联?

编辑:

在Visual Studio中似乎存在视觉(?)错误。当我打开网站文件夹作为网站并查看Views.ascx.designer.cs时,它并不表明它已关联。但是,如果我打开同一网站的解决方案文件,则这些文件已关联,一切都很好。

需要明确的是,即使它仍然显示以下错误消息,它仍在工作,我认为将其作为网站而不是作为解决方案来打开是一个错误。


在我的实时网站上,我遇到了一个错误:

在此处输入图片说明

但是它应该存在,因为我在Views.ascx.designer.cs中拥有它:

在此处输入图片说明

但是在Visual Studio中,我的Views.ascx.designer.cs未与我的View.ascx关联:

问题!

我试图将.designer文件拖放到View.ascx上,但它显示以下错误消息:

在此处输入图片说明

它可以正常工作,在我的开发服务器上看起来也很好:

在此处输入图片说明

我不确定如何将文件与View.ascx或View.ascx.cs文件关联起来。

c# asp.net web-services visual-studio

2
推荐指数
1
解决办法
3388
查看次数