使用这样的静态任务会导致内存泄漏吗?

时间:2016-09-22 19:43:55

标签: c# memory-leaks reference json.net uwp

以下静态C#任务是否会导致内存泄漏?请注意,与JSON相关的方法正在使用Newtonsoft.JSON.Net

public static async Task<List<Result>> TMDBDiscover(string url)
{
    using (HttpClient client = new HttpClient())
    {
        using (HttpResponseMessage response = await client.GetAsync(url))
            {
                using (Stream stream = response.Content.ReadAsStreamAsync().Result)
                {
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        List<Result> ResultList = new List<Result>();
                        string json = reader.ReadToEnd();
                        var root = JsonConvert.DeserializeObject<RootObject>(json);
                        foreach (Result r in root.results)
                        {
                            ResultList.Add(r);
                        }
                        root = null;
                        json = "";
                        return ResultList;
                    }
                }
            }
        }
    }

从这样的页面调用此方法:

foreach (Result r in await TMDBDiscover("url"))
    listview.Items.Add(r)

创建一个没有被GC收集的ResultList的引用?我这样说是因为我用Resharper的dotMemory工具检查了应用程序的内存,当我导航到另一个页面时,ResultList中包含的一些数据似乎被遗留了。

1 个答案:

答案 0 :(得分:1)

不,这里没有内存泄漏。任务不是静态的 - 任务是从静态方法返回。也没有必要将root设置为nulljson为空字符串。

另一方面,你不应该在这里使用Result;请改用await