C#任务内存泄漏

时间:2016-04-28 07:30:29

标签: c# memory-leaks task

我在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);

一切都很好,我的记忆很扁平(没有泄漏!)......但我需要这个是异步的。

2 个答案:

答案 0 :(得分:0)

我也遇到过类似的问题。 你在使用内存流吗?

就我而言,

我在内存流中放了一个 5MB 的图片并使用了它,但没有真正的内存泄漏,但它导致了内存不足错误。

如果只是64bit的话,通过Visual Studio打开和32bit一样。 在debug模式下,和32位环境一样,所以出现的快一点,在release模式下,是64位环境,所以出现的晚一点。

如果在任务管理器中内存持续增加,你应该考虑Dispose,但如果出现内存不足错误,则应该检查是否使用了需要分配连续地址的对象。

答案 1 :(得分:-1)

使用task.Dispose()来处理任务使用的内存