gpt4 book ai didi

c# - asp.net mvc 应用程序中的文件读写内存泄漏

转载 作者:行者123 更新时间:2023-11-30 20:44:36 24 4
gpt4 key购买 nike

Intailly 我从文本文件中读取 json 字符串并将 json 字符串转换为对象并将其添加到列表中。然后我在循环中调用 instagram feed API,在得到响应后我将响应字符串转换为 json 对象并将其添加到列表中。最后,我将对象列表转换为 json 字符串并将其写入文本文件。

我需要更新两个文本文件中的 json 字符串,因此在完成对 instagram 的所有请求后,我将 json 字符串从一个文本文件复制到另一个文本文件。

我的问题

我每 10 分钟调用一次此 InstagramRecentList 方法,以反射(reflect)我网站中最近的 instagram 提要。当我检查服务器中的内存使用情况时,这个应用程序池在一个阶段占用了更多内存,所有托管在 IIS 中的应用程序因此而停止工作。执行上述过程的最佳和有效方法是什么,这样我的应用程序就不会占用更多内存。

Here所选进程的屏幕截图显示了该应用程序池的内存使用情况,截至目前,我每天都在回收应用程序池。如果我停止回收应用程序池,内存使用量会增加。请帮我。对不起我的英语。

public ActionResult InstagramRecentList()
{
string filepath = Path.Combine(ConfigurationManager.AppSettings["instgramfilepath"], Constants.w_Instagram_recent_listJsonFile);

string ClientId = ConfigurationManager.AppSettings["instgramclientid"];
string HondaId = ConfigurationManager.AppSettings["instgramhondaid"];
WriteInstagramRecentList(filepath, HondaId, ClientId);
string wp = Path.Combine(ConfigurationManager.AppSettings["instgramfilepath"], Constants.r_Instagram_recent_listJsonFile);
string Jsonstring = String.Empty;
using (StreamReader sr = System.IO.File.OpenText(filepath))
{
string s = String.Empty;
while ((s = sr.ReadLine()) != null)
{
Jsonstring = Jsonstring + s;
}
}

TextWriter tw = new StreamWriter(wp);
tw.WriteLine(Jsonstring);
tw.Close();
tw.Dispose();
return View("UpdateResult");
}

private static void WriteInstagramRecentList(string filepath, string HondaId, string ClientId, string nextpageurl = null)
{
string feedurl = string.Empty;
List<object> modeldata = new List<object>();
if (nextpageurl != null)
{
feedurl = nextpageurl;

string Jsonstring = String.Empty;
using (StreamReader sr = System.IO.File.OpenText(filepath))
{
string s = String.Empty;
while ((s = sr.ReadLine()) != null)
{
Jsonstring = Jsonstring + s;
}
}
if (!string.IsNullOrEmpty(Jsonstring))
{
modeldata = JsonConvert.DeserializeObject<List<object>>(Jsonstring);
}
}
else
{
feedurl = String.Format("https://api.instagram.com/v1/users/{0}/media/recent/?client_id={1}&count={2}", HondaId, ClientId, 200);
}

var request = WebRequest.Create(feedurl);
request.ContentType = "application/json; charset=utf-8";
string text;
var response = (HttpWebResponse)request.GetResponse();
using (var reader = new StreamReader(response.GetResponseStream()))
{
text = reader.ReadToEnd();
if (!string.IsNullOrEmpty(text))
{
dynamic result = System.Web.Helpers.Json.Decode(text);
if (result.data != null)
{
modeldata.AddRange(result.data);
}
string json = JsonConvert.SerializeObject(modeldata);
TextWriter tw = new StreamWriter(filepath);
tw.WriteLine(json);
tw.Close();
tw.Dispose();
if (result.pagination != null && !string.IsNullOrEmpty(result.pagination.next_url) && modeldata.Count < 205)
{
WriteInstagramRecentList(filepath, HondaId, ClientId, result.pagination.next_url);
}

}
}
}

最佳答案

我的第一个建议是 - 尽量避免递归调用
WriteInstagramRecentList 方法。

关于c# - asp.net mvc 应用程序中的文件读写内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29099500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com