gpt4 book ai didi

c# - DbContext 内存溢出异常

转载 作者:行者123 更新时间:2023-11-30 12:42:59 27 4
gpt4 key购买 nike

我有一个 DbContext,它的数据集超过 2000 万条记录,必须将其转换为不同的数据格式。因此,我将数据读入内存,执行一些任务,然后处理 DbContext。代码工作正常,但过了一会儿我得到 OutOfMemoryExceptions。我已经能够将它缩小到以下代码,我在其中检索 2M 记录,然后释放它们并再次获取它们。第一个检索工作正常,第二个抛出异常。

// first call runs fine
using (var dbContext = new CustomDbContext())
{
var list = dbContext.Items.Take(2000000).ToArray();
foreach (var item in list)
{
// perform conversion tasks...
item.Converted = true;
}
}

// second call throws exception
using (var dbContext = new CustomDbContext())
{
var list = dbContext.Items.Take(2000000).ToArray();
foreach (var item in list)
{
// perform conversion tasks...
item.Converted = true;
}
}

GC 不应该自动释放在第一个 using block 中分配的所有内存,以便第二个 block 应该像第一个 block 一样运行吗?

在我的实际代码中,我不会一次检索 200 万条记录,而是在每次迭代中检索 0 到 30K 之间的记录。然而,大约 15 分钟后,我的内存用完了,尽管所有对象都应该被释放。

最佳答案

我怀疑你见过 LOH。可能您的对象大于阈值并且它们正在到达那里,因此默认情况下 GC 没有帮助。

试试这个:https://www.simple-talk.com/dotnet/.net-framework/large-object-heap-compaction-should-you-use-it/

看看你的异常是否消失了。

即在第一部分和第二部分之间添加:

GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
GC.Collect();

关于c# - DbContext 内存溢出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32162321/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com