Entity framework 实体框架对象何时处置其数据?

Entity framework 实体框架对象何时处置其数据?,entity-framework,garbage-collection,Entity Framework,Garbage Collection,假设我有以下代码: using (var db = new MyDatabaseContext()) { foreach (var entity in db.LargeEntities) { byte[] data = entity.LargeBlob; File.WriteAllBytes("c:\\" + entity.FileName); } } 每个entity.LargeBlob的数据何时准备好进行垃圾收集?在循环中?在使用

假设我有以下代码:

using (var db = new MyDatabaseContext())
{
    foreach (var entity in db.LargeEntities)
    {
        byte[] data = entity.LargeBlob;
        File.WriteAllBytes("c:\\" + entity.FileName);
    }
}  

每个entity.LargeBlob的数据何时准备好进行垃圾收集?在循环中?在使用声明之后?我已经处理完writealBytes行之后的对象,所以我希望尽快处理它。

在使用
块之后,它就可以进行gc了。由于EF保留加载项的本地副本,因此您必须释放上下文以释放缓存项。

在使用
之后,它就可以进行gc了。因为EF保留加载项的本地副本,所以您必须释放上下文以释放缓存项。

Ok,所以要实现更早的释放,我必须先获取主键列表,然后在循环中使用using语句对其进行迭代,对不对?@Nilzor:您可能可以在不跟踪的情况下加载实体。在EF4.1中,这将是:
foreach(db.largeenties.AsNoTracking()中的var实体)
。在这种情况下,EF不会在其上下文中缓存实体(至少如果您没有对实体进行延迟加载的属性的话)。好的,所以要实现更早的处理,我必须首先获取主键列表,然后在循环中使用using语句对其进行迭代,对吗?@Nilzor:您可以在不跟踪的情况下加载实体。在EF4.1中,这将是:
foreach(db.largeenties.AsNoTracking()中的var实体)
。在这种情况下,EF不会在其上下文中缓存实体(至少如果您没有在实体上延迟加载的属性)。