gpt4 book ai didi

c# - ASP.net MVC - Razor HTML Helper 正在占用内存而不放手

转载 作者:太空宇宙 更新时间:2023-11-03 12:28:38 25 4
gpt4 key购买 nike

我有一个全新的 ASP.Net MVC 项目正在耗尽内存并拒绝释放它,原因我无法理解。

应用

该站点只有 2 个页面,均由 HomeController 提供服务。

public class HomeController: Controller
{
public ActionResult Index()
{
GC.Collect();

return View();
}

public ActionResult List()
{
GC.Collect();

var homeViewModel = new HomeViewModel();

for (int i = 0; i < 300; i++)
{
homeViewModel.MyList.Add(new MyClass
{
Field1 = "AAAAAAAAAAAAAAAAAAAAAAAAAAA",
Field2 = "BBBBBBBBBBBBBBBBBBBBBBBBBBB",
Field3 = "CCCCCCCCCCCCCCCCCCCCCCCCCCC",
Field4 = "DDDDDDDDDDDDDDDDDDDDDDDDDDD",
Field5 = "EEEEEEEEEEEEEEEEEEEEEEEEEEE",
Field6 = "FFFFFFFFFFFFFFFFFFFFFFFFFFF"
});
}

return View(homeViewModel);
}
}

public class HomeViewModel
{
public List<MyClass> MyList { get; set; }

public HomeViewModel()
{
MyList = new List<MyClass>();
}
}

public class MyClass
{
public string Field1 { get; set; }
public string Field2 { get; set; }
public string Field3 { get; set; }
public string Field4 { get; set; }
public string Field5 { get; set; }
public string Field6 { get; set; }
}

您会注意到 Index 和 List 操作都会在每次调用开始时强制进行垃圾回收。

索引页面只包含共享的 _Layout.cshtml,没有其他内容。

@model WebApplication1.Controllers.HomeViewModel

@{
ViewBag.Title = "Home Page";
}

列表页面包含一个 300 行的表格,每行显示一个类的 6 个字符串属性,旨在演示我的问题。

@model WebApplication1.Controllers.HomeViewModel

@{
ViewBag.Title = "List Page";
}

<table class="table table-condensed">
@foreach (var item in Model.MyList)
{
<tr>
<td style="@MyHelpers.DetermineStrikethruStyle(true)">@item.Field1</td>
<td style="@MyHelpers.DetermineStrikethruStyle(true)">@item.Field2</td>
<td style="@MyHelpers.DetermineStrikethruStyle(true)">@item.Field3</td>
<td style="@MyHelpers.DetermineStrikethruStyle(true)">@item.Field4</td>
<td style="@MyHelpers.DetermineStrikethruStyle(true)">@item.Field5</td>
<td style="@MyHelpers.DetermineStrikethruStyle(true)">@item.Field6</td>
</tr>
}
</table>

如您所见,表格中的单元格是根据 Razor HTML Helper 的结果设置样式的,如下所示:

@helper DetermineStrikethruStyle(bool isStrikeThru)
{
@(isStrikeThru ? "text-decoration: line-through;" : "")
}

问题

下面你可以看到每次刷新列表页面时内存是如何被消耗的。

启动时 – 显示主页

enter image description here

刷新索引页后 x 10

enter image description here

第一次显示列表页面后

enter image description here

第二次显示列表页后

enter image description here

第三次显示列表页后

enter image description here

第 4 次显示列表页后

enter image description here

第 5 次显示列表页后

enter image description here

回避问题

只需在列表页面中删除对 Razor HTML Helper 的调用即可完全避免该问题。

@model WebApplication1.Controllers.HomeViewModel

@{
ViewBag.Title = "List Page";
}

<table class="table table-condensed">
@foreach (var item in Model.MyList)
{
<tr>
<td>@item.Field1</td>
<td>@item.Field2</td>
<td>@item.Field3</td>
<td>@item.Field4</td>
<td>@item.Field5</td>
<td>@item.Field6</td>
</tr>
}
</table>

启动时 – 显示主页

enter image description here

刷新索引页后 x 10

enter image description here

第一次显示列表页面后

enter image description here

……第 5 次之后

enter image description here

……第 25 次之后

enter image description here

……第 50 次之后

enter image description here

有什么想法吗?我现在很困惑,结果是应用程序无法使用。

谁能提供任何指导?

最佳答案

移动

@helper DetermineStrikethruStyle(bool isStrikeThru)
{
@(isStrikeThru ? "text-decoration: line-through;" : "")
}

在服务器端的 HtmlHelper Extensions 方法上。

public static string DetermineStrikethruStyle(this HtmlHelper helper, bool isStrikeThru)
{
return isStrikeThru ? "text-decoration: line-through;" : String.Empty;
}

关于c# - ASP.net MVC - Razor HTML Helper 正在占用内存而不放手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43636988/

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