标签: idisposable

如何使用IDisposable处理对象

我想使用IDisposable接口清除内存中没有使用的任何资源.

public class dispose:IDisposable
{
        public void Dispose()
        {

            throw new NotImplementedException();
        }

        public void fun()
        {
            PizzaFactory _pz = new PizzaFactory();   //
        }
    }
Run Code Online (Sandbox Code Playgroud)

我想处理pz对象,当没有ref它存在时.请让我知道怎么做.

.net c# garbage-collection idisposable

0
推荐指数
2
解决办法
1753
查看次数

C#:是否正在使用和尝试使用StreamReader配置错误的选项?

想一想:

StreamReader reader = null;

try
{
    reader = new StreamReader(_fileName);
}
catch
{
    //show error that file not found
    reader.Dispose();
    return false;
}

try
{
    //code to read file
}
catch
{
   //show error badly formed file
}
finally
{
    reader.Dispose();
}
//return 
Run Code Online (Sandbox Code Playgroud)

当无法打开文件时,上面的代码不起作用,因为它调用Dispose for null导致异常.

我不想使用因为我想分开打开文件和阅读它的问题.这可以通过百万种不同的渔获量实现,但我不想这样做.另外如果使用与try-finally相同,那么"隐藏Dispose"会抛出不需要的异常吗?当我需要的只是捕获异常打开它并读取异常时,这将是最好的方法吗?

谢谢和BR - 马蒂

file-io dispose idisposable using c#-2.0

0
推荐指数
1
解决办法
1095
查看次数

ASP.NET:大量内存泄漏..它在哪里?D B?UpdatePanel的?没有一次性用品?

我一直在开发一个非常大的应用程序,几天前我将它上传到我的服务器.现在我发现它有几个内存泄漏 - 哦哦.我的服务器在1GB内存上运行Windows Server 2008.当我在线有0人时,只使用550-600mb.当一个人上线时,内存开始暴涨,如果3-4人在线,则使用1GB内存.

该应用程序是在ASP.NET中使用AJAX进行的.它有许多每秒运行的更新面板和相当多的javascript.它始终使用5-7个会话.我使用LINQ to SQL作为数据库通信.

我在服务器上尝试过perfmon.exe,我发现:

  • Gen 0系列在几分钟内从0%变为100%
  • Gen 1系列在5分钟内从0%到50%
  • Gen 2在任何时候都非常接近0%
  • 总堆字节速度非常快,达到100%

我还用Visual Studio对我的程序进行了分析.我的总运行时间的8%是在.ToList()方法中完成的,这正是由LINQ to SQL引起的.

我的理论......

(1)Linq to SQL dataContext

这可能是一个疯狂的事情,但是:在我的数据访问层中,我有很多方法:

  • AddSomethingToDatabase();
  • AddSomethingElseToDatabase();
  • DeleteSomethingFromDatabase();

其中每个都有以下初始化:

GameDataContext db = new GameDataContext();
Run Code Online (Sandbox Code Playgroud)

这意味着上述陈述几乎每秒或更长时间.

(2)没有对象实现IDisposable

我必须诚实:我从未使用过IDisposable.据我所知,这可能是个问题.

另外,如果这是泄漏,哪些类应该实现呢?我没有任何I/O工作或其他工作,只有DataContext.

(3)UpdatePanels和jQuery的负载

我有一些担心更新面板可能会给性能带来问题,但我不知道如何检查它.


所以我的问题是:关于内存泄漏可能是什么的任何想法?有关如何查找内存泄漏的任何想法?关于如何解决它的任何想法?

我很想听到有上述情况经验的人的来信!

谢谢,拉尔斯

asp.net memory-leaks updatepanel idisposable linq-to-sql

0
推荐指数
1
解决办法
1164
查看次数

为什么System.Net.Mail.MailMessage实现IDisposable

所以我一直在使用System.Net.Mail.MailMessage对象发送电子邮件SmtpClient一段时间了.我注意到某处MailMessage实现了IDisposable,所以我总是在一个using块中使用它.

using(MailMessage msg = new MailMessage())
{
    msg.To = blah... etc;
    ...
    smtpclient.Send(msg);
}
Run Code Online (Sandbox Code Playgroud)

从元数据中,您可以看到有关实现的信息 MailMessage

// Summary:
//     Releases all resources used by the System.Net.Mail.MailMessage.
[TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
public void Dispose();
//
// Summary:
//     Releases the unmanaged resources used by the System.Net.Mail.MailMessage
//     and optionally releases the managed resources.
//
// Parameters:
//   disposing:
//     true to release both …
Run Code Online (Sandbox Code Playgroud)

.net idisposable mailmessage

0
推荐指数
3
解决办法
1797
查看次数

为什么WPF不使用IDisposable,有什么后果?

所以,我之前从未做过一个相当大的WPF项目,但这个让我感到疑惑; 怎么了WPF类没有实现IDisposable?相比之下,Windows窗体中的所有UI元素都实现了IDisposable,以确保它们摆脱了底层句柄等.

我认为那里有相同的Windows对象,这些资源必须被释放; 那么,WPF是如何做到的呢?

除了Close()它们之外,还有什么我需要做的WPF Window对象吗?

.net wpf idisposable

0
推荐指数
1
解决办法
2473
查看次数

我可以在这个片段中以某种方式用using块替换Initialize()和Close()方法调用吗?

你有没有办法建议帮助摆脱调用Initialize()和Close()方法并将其替换为使用块?

或者这种方法完全没问题?

(想法是确保当FooWriter的消费者写下一些字符串并完成此操作时将处理Writer.)

class Program
    {
        static void Main(string[] args)
        {
            var writer  = new FooWriter();

            writer.Initialize();

            foreach (var s in args)
                writer.Write(s);

            writer.Cose();
    }


public class FooWriter
{

    public StreamWriter Writer;

    public void Initialize()
    {
        Writer = new StreamWriter("MyFile.txt", false);
    }

    public void Write(string line)
    {
        if(Writer==null)
            throw new NullReferenceException(Writer, "Writer"); // Guard Writer

        Writer.WriteLine(line);
    }

    public void Close()
    {
        Writer.Dispose();
    }

}
Run Code Online (Sandbox Code Playgroud)

.net c# idisposable using-statement streamwriter

0
推荐指数
1
解决办法
96
查看次数

如果在using子句中发生错误,C#`Using`语句是否会关闭变量

可能重复:
什么是C#使用块,为什么要使用它?

如果我运行以下代码:

using (SPWeb web = SPContext.Current.Site.OpenWeb("/myweb")){

   //error happens here
}
Run Code Online (Sandbox Code Playgroud)

如果在结束括号之前发生错误web,是否会正确处理对象

我们被告知使用对象的using语句OpenWeb是最好的,但
我们在日志中看到很多关于SPRequests和SPWeb的错误.

c# idisposable using spweb sharepoint-2010

0
推荐指数
1
解决办法
497
查看次数

如何在类有多个成员时实现Dispose

如何实现处理一个类,它有对象作为不实现IDisposable的成员?

请参考下面的例子来了解我的意思:

Public Class MyClass
    Implements IDisposable

    private emp as EmpClass
    private dept as DeptClass

    ' EmpClass and DeptClass doesn't implemented IDisposable interface. 

    ' IDisposable
    Protected Overridable Sub Dispose(disposing As Boolean)
       If Not Me.disposedValue Then
          If disposing Then
            emp = Nothing  ' --> Can't call Dispose method so I set to null
            dept = Nothing ' --> Can't call Dispose method so I set to null
          End If
       End If
      Me.disposedValue = True
    End Sub
End Class
Run Code Online (Sandbox Code Playgroud)

从上面看,所有都是托管对象,我可以做必要的更新.所以请建议那个代码好.

编辑

当我试图创建一个MyClass实例时,编译器给了我一个错误,我必须实现IDisposable.以下是我的通话代码. …

.net vb.net idisposable

0
推荐指数
1
解决办法
89
查看次数

"使用"是否也处理在构造函数中创建的对象?

当创建一个实现一个元素IDisposable,Dispose()是在结束所谓的using块还,如果抛出一个异常,如果我是正确的.

但是,在ClassB一次性元素的构造函数中创建新元素时,如果IDisposable实现了ClassB的对象,是否也会被处置?

using (ClassA a = new ClassA(new ClassB()))
{
}
Run Code Online (Sandbox Code Playgroud)

这可能适用于与之相关的类Stream.但是,这一般适用吗?

.net c# idisposable using-statement

0
推荐指数
1
解决办法
470
查看次数

在使用块结束之前处置的IDisposable对象

我有一个usingIDisposable DirectoryEntry来创建目录条目,访问其中一个属性,然后处置它.但是,目录条目在使用块结束之前被处理.

public static PropertyValueCollection GetProperty(
    this Principal principal, string propertyName)
{
    using (var directoryEntry = principal.GetAsDirectoryEntry())
    {
        return directoryEntry.Properties[propertyName];
    }
}

public static DirectoryEntry GetAsDirectoryEntry(
    this Principal principal)
{
    return principal.GetUnderlyingObject() as DirectoryEntry;
}
Run Code Online (Sandbox Code Playgroud)

该错误被抛出return directoryEntry.Properties[propertyName];,表示该目录条目已被释放.我可以删除使用块,代码将工作,但我担心该对象永远不会被处置.我多次调用它,因此创建目录条目的多个实例并且从未处理过?

c# dispose idisposable active-directory

0
推荐指数
1
解决办法
137
查看次数