像这样使用静态任务可能会导致内存泄漏

本文关键字:内存 泄漏 静态 任务 像这样 | 更新日期: 2023-09-27 18:08:27

以下静态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)

创建一个对ResultList的引用,而该引用不会被GC收集?我这么说是因为我已经用Resharper的dotMemory工具检查了应用程序的内存,当我导航到另一个页面时,ResultList中包含的一些数据似乎是剩余的。

像这样使用静态任务可能会导致内存泄漏

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

顺便说一句,这里不应该使用Result;请改用await