C# 在不终止进程的情况下释放与进程相关的资源
我从数据库中导出了大量数据(特别是图像),我试图处理对象,但内存分配似乎一直在堆积。请帮忙这是我的密码C# 在不终止进程的情况下释放与进程相关的资源,c#,.net,C#,.net,我从数据库中导出了大量数据(特别是图像),我试图处理对象,但内存分配似乎一直在堆积。请帮忙这是我的密码 foreach (var v in EntityFrameworkContext.GetInstance.DbContext.ATasks.ToList()) { if (v.TaskImages.Count == 0) continue; var dir = string.Format("{0}\\{1}"
foreach (var v in EntityFrameworkContext.GetInstance.DbContext.ATasks.ToList())
{
if (v.TaskImages.Count == 0)
continue;
var dir = string.Format("{0}\\{1}", txtDumpFolder.Text, v.Id);
if (!Directory.Exists(dir))
Directory.CreateDirectory(string.Format("{0}\\{1}", txtDumpFolder.Text, v.Id));
lstLog.Invoke((MethodInvoker)delegate()
{
lstLog.Items.Add("---------------------------------------------------------------------");
lstLog.Items.Add(string.Format("DIRECTORY: {0} Created.", dir));
int visibleItems = lstLog.ClientSize.Height / lstLog.ItemHeight;
lstLog.TopIndex = Math.Max(lstLog.Items.Count - visibleItems + 1, 0);
});
v.TaskImages.ToList().ForEach(a =>
{
using (Bitmap bmp = new Bitmap(new MemoryStream(a.Image)))
{
PropertyItem[] pi = bmp.PropertyItems;
bmp.Save(string.Format("{0}\\{1}.jpg", dir, a.Id), ImageFormat.Jpeg);
LogMessage(string.Format("IMAGE: {0} \n exported.", a.Id));
}
});
GC.Collect();
};
}
GC.Collect()
几乎从来都不是答案。你是如何管理/关闭数据库上下文的?这个问题的标题让我毛骨悚然。释放一个流程的资源而不扼杀它就像在你搬走之前拆掉一栋房子。不推荐。如果您正在泄漏内存,则需要解决该问题。使用内存探查器获取帮助。任务管理器不适合您。不要看它。不要担心内存管理,它不适合您。只有当你遇到异常时才担心这些事情。你没有处理你的记忆流,这可能是个问题。我不知道a.Image的类型是什么,假设它是一个字节数组就可以了。谢谢你的回复,我使用的是单例模式,我刚刚意识到我没有关闭它,我现在就试试。多谢各位