我在C#中有一个Task对象的内存泄漏问题。
这段代码会给我内存泄漏:
Task task = Task.Run(() =>
{
result = analysis.InspectImageAsync(arg1, arg2);
});
await task;
task.ContinueWith( (thisTask) =>
{
MessageBox.Show("kill");
thisTask.Dispose();
thisTask = null;
GC.Collect();
});
如果我在没有Task.Run()的情况下运行它:
result = analysis.InspectImageAsync(arg1, arg2);
一切都很好,我的记忆很扁平(没有泄漏!)......但我需要这个是异步的。
答案 0 :(得分:0)
我也遇到过类似的问题。 你在使用内存流吗?
就我而言,
我在内存流中放了一个 5MB 的图片并使用了它,但没有真正的内存泄漏,但它导致了内存不足错误。
如果只是64bit的话,通过Visual Studio打开和32bit一样。 在debug模式下,和32位环境一样,所以出现的快一点,在release模式下,是64位环境,所以出现的晚一点。
如果在任务管理器中内存持续增加,你应该考虑Dispose,但如果出现内存不足错误,则应该检查是否使用了需要分配连续地址的对象。
答案 1 :(得分:-1)
使用task.Dispose()来处理任务使用的内存