C# 需要dispose()时的规则是什么?

C# 需要dispose()时的规则是什么?,c#,.net,vb.net,entity-framework,dispose,C#,.net,Vb.net,Entity Framework,Dispose,虽然我已经编写了一段时间了,但实际上我对所谓的中级编码器还不太了解。因此,我理解dispose()的原理,即释放为变量和/或资源保留的内存。我还发现,有时使用EF时,我必须dispose()才能使其他操作正常工作。我不明白的是究竟什么需要发布,何时使用dispose() 例如,我们不处理字符串、整数或布尔等变量。但在我们跨越“一条线”的某个地方,我们使用的变量和/或资源需要处理。我不明白电话线在哪里 当知道何时使用dispose()时,是否有一个原则或几个广泛的原则可以应用 我读了这些文章(,)

虽然我已经编写了一段时间了,但实际上我对所谓的中级编码器还不太了解。因此,我理解dispose()的原理,即释放为变量和/或资源保留的内存。我还发现,有时使用EF时,我必须dispose()才能使其他操作正常工作。我不明白的是究竟什么需要发布,何时使用dispose()

例如,我们不处理字符串、整数或布尔等变量。但在我们跨越“一条线”的某个地方,我们使用的变量和/或资源需要处理。我不明白电话线在哪里

当知道何时使用dispose()时,是否有一个原则或几个广泛的原则可以应用

我读了这些文章(,),但我觉得我不了解何时使用dispose()的基本知识。我看到的一条评论是,当一个变量超出范围时,内存是否会被释放,这引起了我的注意,因为在我看到响应为“否”之前,它不会仅仅因为超出范围而被释放,我会认为它确实在超出范围时被释放。我不想成为第二链接中一个人所说的“无知的开发者”,尽管我觉得这有点苛刻。我们中的一些人仍在学习

这就是为什么我的问题是“什么决定了何时真正需要dispose()?”

我的问题不是如何,而是何时。当然,关于如何使用的注释是有用的,但是即使调用dispose()的方法是一个Using语句,我仍然需要知道何时使用

编辑到原始问题:我知道这是一个很长的解释,因为标记为重复注释的请求,而且这不是一个咆哮,我只是不知道如何确保我将重点放在我的精确问题上。很多时候,我们只是在问问题的方式上绊倒了。正如我在这篇长篇文章的结尾提到的,我将在我们关注我的问题之后编辑所有这些内容,假设我们达到了目的。根据我所读到的,我认为这是一个重要的问题

提议的“答案”帖子是一篇很好的帖子,但并没有真正回答我的问题。CodeNotFound下面的评论也给出了一个很棒的链接,但它也没有真正回答我的问题。我提供了关于这些帖子的评论,试图帮助完善我的精确问题:

:第一个答案以以下注释开头:

一次性对象表示持有CLR本质上不知道的有价值资源的对象

不幸的是,我不明白术语“一次性对象…CLR本质上不知道”包括什么这就是我要问的。我如何知道某件东西是否属于我必须处理的类别?我们总是在代码中定义要使用的东西。我们什么时候越过这条线,它就变成了我需要处理的对象()?顺便说一句,我注意到那篇文章的作者从未给出答案。我不知道这是否意味着他觉得这个问题没有得到回答,或者这只是他那方面的后续工作不好,但希望我已经对我希望理解的内容做了一些改进。当你仔细看这些答案时,它们并没有真正解决哪些对象需要开发人员的操作来处理它们()的问题,或者我如何知道如何识别哪些对象。我只是不知道我创造的东西需要我负责处理。我明白GC和其他条款起作用了,但同样,这只是如何。似乎很清楚的是,大多数经验丰富的专业开发人员都知道他们所创建的东西何时需要处理。我不明白如何知道那件事

:显然是一个受欢迎的答案(1681票),但有标记的答案以

Dispose的要点是释放非托管资源”

好的,但我的问题是,我如何通过查看某个内容知道它是一个非托管资源?我不明白下面的注释如何适用于需要处理的内容

如果您在.NET framework中找到它,它是托管的。如果您自己去查看MSDN,它是非托管的…您现在负责清理它。”

我不明白如何使用这种解释来分类我需要处理的内容()和我不需要的内容。在.net框架中有各种各样的东西;如何区分需要我处理的东西?我怎么看才能告诉我我要为此负责

在那之后,答案继续长篇大论地讲述如何处置(),但我仍然停留在需要处置的问题上。为了让我的话题更加复杂,作者后来说“所以现在我们将

摆脱非托管资源(因为我们必须),

摆脱托管资源(因为我们想提供帮助)

现在我需要考虑处理一组新的使用内存的对象,我也不知道它们是什么。 对于喜欢这个答案风格的人(解释原因,所以如何变得显而易见)

我知道作者是在建议其他文章,但作者的建议是理解“为什么”就意味着“如何”“显而易见并不真正合法,因为对一个人来说显而易见的东西并不总是对另一个人来说显而易见。即便如此,作者还是更多地关注了为什么和如何,我的问题是关于何时,意思是需要处理什么(),而不是当我处理完它时。我知道我什么时候结束了