gpt4 book ai didi

c# - 从数据库加载大块数据时如何避免 OutOfMemoryException?

转载 作者:行者123 更新时间:2023-12-02 22:32:38 26 4
gpt4 key购买 nike

比如说,我们有一个表,其中包含一些包含 jpg 文件二进制数据的大型 text 字段。任务是从磁盘上的数据库中获取这些文件。因此,起初我决定执行以下操作:

MyDataContext dc = new MyDataContext();
foreach(ImageTable t in dc.ImageTable.OrderBy(i=>i.Id))
{
using (StreamWriter writer = new StreamWriter(new FileStream(string.Concat(t.Name,".jpg"), FileMode.CreateNew), Encoding.GetEncoding(1251)))
{
writer.Write(t.Data);
writer.Close();
}
}

但是一旦表有大约 20,000 行,我很快就会收到 OutOfMemoryException

最后,为了避免将所有行加载到一个数据上下文中,我执行了以下操作:

MyDataContext dc = new MyDataContext();
foreach(int id in dc.ImageTable.OrderBy(i=>i.Id).Select(i=>i.Id))
{
using (MyDataContext _dc = new MyDataContext())
{
ImageTable t = _dc.ImageTable.FirstOrDefault(i => i.Id == id);
using (StreamWriter writer = new StreamWriter(new FileStream(string.Concat(t.Name,".jpg"), FileMode.CreateNew), Encoding.GetEncoding(1251)))
{
writer.Write(t.Data);
writer.Close();
}
}
}

所以每一行都由一个单独的数据上下文加载……没有内存问题了!但这肯定不是完成任务的最佳方法。

谁能给点建议?

最佳答案

您可以尝试关闭 object tracking :

_dc.ObjectTrackingEnabled = false;

关于c# - 从数据库加载大块数据时如何避免 OutOfMemoryException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11978797/

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