gpt4 book ai didi

c# - 使用大的静态变量是个坏主意吗?

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

我使用 ASP.NET MVC 4,我想加载大量数据并使我的所有类(class)都可以访问这些数据。这是我的代码的极简示例:

public class MyController : Controller
{
public static List<MyObject> myList = null;

public ActionResult Index()
{
MyViewModel model = new MyViewModel();
myList = GetAllData(User.IDentity.Name); // Fill my list with 2k rows
model.List = myList;

return View(model);
}


public JsonResult GetData(int i)
{
return Json(myList.Where(x => x.Data == i));
}

一切都在本地工作,但当我在服务器上发布(崩溃)时,我遇到了多个用户的问题。

我想我犯了一个错误。我确定这些静态数据存在内存泄漏问题。

我怎样才能避免这个问题?我应该使用单例吗?

最佳答案

Controller 是无状态的,因此每次调用操作都会创建一个新的 Controller 实例,这会破坏您试图实现的目标。也就是说,下面是通过在构造函数中执行静态实例化的更好实现:

public MyController()
{
myList = GetAllData();
}

但是,我建议不要这样做,因为我认为问题更多的是您设计中的缺陷,或者是对 Controller 中状态处理方式的误解 - 它们是无状态的。

编辑:添加示例地址评论:常见的惯例是执行以下操作:1.去除静电,真的没有任何收获。

然后:

public ActionResult Index()
{
MyViewModel model = new MyViewModel();

model.List = GetAllData(User.IDentity.Name);;

return View(model);
}


public JsonResult GetData(int i)
{
var model = GetAllData(User.IDentity.Name).Where(x => x.Data == i).ToList();
return Json(model);
}

您不需要静态,客户端对 Index 和 GetData 的调用永远不会在 Controller 的同一个实例中执行,静态在这个实例中是无用的。

关于c# - 使用大的静态变量是个坏主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21432228/

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