相关疑难解决方法(0)

C#:应该将对象变量赋值为null吗?

在C#中,null如果你已经完成使用它,是否有必要分配一个对象变量,即使它会超出范围?

c# null garbage-collection

45
推荐指数
6
解决办法
2万
查看次数

处理.NET IDisposable对象

我在C#工作,并且我一直非常松懈地使用using块来声明实现的对象IDisposable,这显然是你应该做的.但是,我没有看到一种简单的方法来了解我何时滑倒.Visual Studio似乎没有以任何方式表明这一点(我只是错过了什么?).我每次申报任何东西时都应该检查帮助,然后逐渐建立一个百科全书式的记忆,对象是哪些,哪些不是一次性的?似乎没有必要,痛苦和容易出错.

如何处理这个问题?

编辑:

看一下相关问题的侧边栏,我发现了另一个问题,它明确表示Dispose()应该被对象的终结器调用.因此,即使你自己也没有自己调用它,它最终会发生,这意味着如果你不使用它就不会有内存泄漏using(这是我认为我一直非常担心的).唯一需要注意的是,垃圾收集器不知道对象作为非托管内容持有多少额外内存,因此无法准确了解通过收集对象将释放多少内存.这将导致垃圾收集器的性能低于平常.

简而言之,如果我错过了,那就不是世界末日了using.我只是希望有些东西会产生至少一个警告.

(偏离主题:为什么链接到另一个问题没有特殊的降价?)

编辑:

好的,好的,别叫吵了.这是超级决斗所有激烈的戏剧性 - 花栗鼠级别的重要打电话Dispose()或我们都会.

现在.鉴于此,为什么这么容易 - 地狱,为什么甚至允许 - 做错了?你必须尽力去做正确的事.像其他一切一样做它会导致世界末日(显然).封装这么多,是吧?

[偷偷摸摸,反感]

.net c# idisposable using-statement visual-studio

40
推荐指数
2
解决办法
9567
查看次数

IDisposable.Dispose()实现应该是幂等的吗?

Microsoft.NET框架提供了IDisposable需要实现void Dispose()方法的接口.其目的是IDisposable实现可能已分配实施的昂贵资源的手动或基于范围的发布.示例包括数据库集合,流和句柄.

我的问题是,如果该Dispose()方法的实现是幂等的 - 当在同一个实例上多次调用时,该实例仅被"处置"一次,并且后续调用不会抛出异常.在Java中,大多数具有相似行为的对象(作为示例再次出现流和数据库连接)对于它们的close()操作是幂等的,这恰好是该Dispose()方法的模拟.

但是,我个人使用.NET(特别是Windows Forms)的经验表明,并非所有实现(它们都是.NET框架本身的一部分)都是幂等的,因此后续调用这些实现会引发争议ObjectDisposedException.这真的让我对如何处理一次性对象的实现感到困惑.该场景是否有共同的答案,还是取决于对象的具体上下文及其用法?

.net c# memory-management idempotent

22
推荐指数
3
解决办法
851
查看次数

有没有理由在finally块中将对象设置为null?

我正在为我的公司清理一些C#代码,我注意到的一件事是构建此应用程序的承包商将对象引用设置为null.

例:

get {
  Object o = new Object(); // create a new object that is accessed by the reference 'o'
  try {
   // Do something with the object
  }
  finally {
    o = null; // set the reference to null
  }
}
Run Code Online (Sandbox Code Playgroud)

据我所知,创建的对象仍然存在.有可能它现在无法访问,具体取决于是否有任何其他引用,但它仍然存在,直到GC到来并清理它.

有没有理由在最后一个块中有这个?在任何情况下,这可能会产生广告中的内存泄漏吗?

谢谢!

c#

9
推荐指数
2
解决办法
1567
查看次数

什么时候对象有资格进行垃圾回收?

在Joseph Albahari的书中简要介绍了C#5.0,我找到了这个

在此输入图像描述 一旦你传递了最后一个变量使用的代码行,它就会说它所引用的对象有资格进行垃圾收集(即如果没有其他变量持有对该对象的引用).

但是根据UC Berkley的这个讲座,只要对象上存在对象的引用,它就不会被垃圾回收.我的理解是,在方法返回之前,变量保留在堆栈上.这意味着它引用的任何对象都是活动的,直到该方法返回.

这是本书中的错误还是java和.net垃圾收集的工作方式不同?

c# garbage-collection

6
推荐指数
2
解决办法
1758
查看次数

正则表达式不是有效的类型或命名空间C#

我正在尝试将此代码段添加到我的代码中:

public string Highlight(string InputTxt)
{
    string Search_Str = txtSearch.Text.ToString();

    // Setup the regular expression and add the Or operator.
    Regex RegExp = new Regex(Search_Str.Replace(" ", "|").Trim(), RegexOptions.IgnoreCase);

    // Highlight keywords by calling the 
    //delegate each time a keyword is found.
    return RegExp.Replace(InputTxt, new MatchEvaluator(ReplaceKeyWords));

    // Set the RegExp to null.
    RegExp = null;
}
Run Code Online (Sandbox Code Playgroud)

但是,由于某种原因,"Regex"没有显示 - 找不到类型或命名空间.我想我必须使用更新版本的C# - 任何人都可以用更新的方式来帮我解决这个问题吗?我使用的是System.Text.RegularExpressions.Regex - 也许他们完全摆脱了它?

c# regex

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

在我的WCF服务上调用close()会释放所有资源吗?

在我的WCF服务上调用close会终止所有资源还是为GC设置它们还是应该将它设置为null?

c# wcf garbage-collection

4
推荐指数
1
解决办法
1593
查看次数

处置和没有区别

 **Public Sub ExecuteQuery(ByVal pQueryString As String, Optional ByVal pConn As Odbc.OdbcConnection = Nothing)

            Dim Mycmd As New Odbc.OdbcCommand(pQueryString, MyConn)
            Mycmd.ExecuteNonQuery()
            Mycmd.Dispose()

    End Sub**
Run Code Online (Sandbox Code Playgroud)

这里我使用Dispose(Mycmd.Dispose())清除对象.我可以在这里使用Nothing(Mycmd = Nothing?.哪个最好?

请帮助我先生,

通过

了Arul.

vb.net

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

是否有必要通过在c#中将obj设置为null来释放内存?

可能重复:
在.NET中使用后将对象设置为Null/Nothing
您是否需要处理对象并将其设置为null?

对于大型或高流量网站:

第一个问题:

将设置Object=null(不是Disposable)释放内存?或者是释放记忆的其他方式?

第二个问题:

在正常代码中是否需要显式释放内存?

c# memory asp.net

3
推荐指数
1
解决办法
3554
查看次数

在Last中取消对象是不是很糟糕?

我已经看到开发人员在他们编写的几乎所有方法中都尝试,捕获并最终消除了他们在Finally块中创建的对象.

例如-

     public void Demo()
     {
        Something s = null;
        try
        {
            s = new Something();
        }
        catch (Exception ex)
        {

            throw;
        }
        finally
        {
            s = null;
        }
     }
Run Code Online (Sandbox Code Playgroud)

这样做有什么用吗?建议这样做是为了使对象无效,因此GC可以收集它们.

如果不这样做,我们可以使用" 使用 "或IDisposable吗?

什么是最佳做法?

c# oop exception-handling

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