-1
下面的靜態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中包含的一些數據似乎被遺留下來。
哦,是的,關於設置根或JSON爲空,這只是一個愚蠢的測試,找出是否可能改變了任何東西(它沒有)。此外,對我的無知感到抱歉,但我是C#的新手:靜態類和從靜態方法返回的任務有什麼區別? – user2950509
就內存泄漏而言,一個靜態*字段*將留在內存中。靜態方法只是一種方法,你可以調用它而不需要包含它的類的實例,就像函數一樣。靜態類是隻能包含靜態成員的類。 –