【发布时间】:2017-02-06 18:21:25
【问题描述】:
我想知道在创建对象、在 C# 中执行 LINQ 时的最佳实践是什么。例如,我意识到当我使用 LINQ 打开连接时,我应该将模型对象放入这样的 using 语句中:
using(var ctx = new mymodel())
{
}
现在,作为 EF 类的对象呢?
它们没有实现 IDisposable 接口,因此在创建这样的对象时我不能这样做:
using(var user = new Users())
{
}
但是当一个动作被这样调用时:
public ActionResult InsertUser()
{
var user = new Users();
}
我不清楚插入数据库后该对象会发生什么。这个对象是在内存中分配还是被释放?如果不是,那么在不再需要内存后释放内存的最佳做法是什么......?
另外还有静态变量...
所以总结一下,我的问题是:
在创建类的对象实例时释放内存的最佳做法是什么?
IDisposable 接口的实现是否在我有好的选择的每个类上实现?
在 .NET MVC 中创建静态变量时,释放此类变量占用的内存的最佳方法是什么?
同样的问题也适用于 Session 对象?
附:伙计们,如果你们所有人都在阅读本文以发表您的意见或为一些文档/博客文章发布一些有用的链接,以便我可以扩展我的视野,我将非常感激 =)
【问题讨论】:
-
你有内存消耗的问题吗?
-
对象超出范围时被收集。如果没有活动代码区域引用该对象或间接引用它的对象树,它将被收集。您只需要在具有需要清理的非托管资源的类上实现
IDisposable。 -
这是一个过早优化的例子。你真的有性能问题吗?
-
是的,我会说这绝对是相关的。是的,我的意思是它们是由垃圾收集器收集的。
-
一如既往地阅读有关垃圾收集器的文档。它会告诉你什么是“非托管资源”。如果您有更具体的问题,请返回此处。
标签: c# performance entity-framework linq memory