像这样使用静态任务可能会导致内存泄漏
本文关键字:内存 泄漏 静态 任务 像这样 | 更新日期: 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
。