以下静态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中包含的一些数据似乎被遗留了。
答案 0 :(得分:1)
不,这里没有内存泄漏。任务不是静态的 - 任务是从静态方法返回。也没有必要将root
设置为null
或json
为空字符串。
另一方面,你不应该在这里使用Result
;请改用await
。