使用大的静态变量是一个坏主意吗?

2023-12-25

我使用 ASP.NET MVC 4,我想加载大量数据并使其在我的所有类中都可以访问。 这是我的代码的简约示例:

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));
    }

}

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

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

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


控制器是无状态的,因此每次调用操作都会创建一个新的控制器实例,这将违背您想要实现的目的。也就是说,通过在构造函数中执行实例化静态的更好实现如下:

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

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

编辑:添加示例以解决评论: 常见的约定是执行以下操作: 1.消除静电,它确实没有给你带来任何好处。

Then:

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 的调用永远不会在控制器的同一实例中执行,静态在这种情况下是无用的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用大的静态变量是一个坏主意吗? 的相关文章

  • C 编程 - 文件 - fwrite

    我有一个关于编程和文件的问题 while current NULL if current gt Id Doctor 0 current current gt next id doc current gt Id Doctor if curre
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new

随机推荐

  • 在 Angular 6 工作区中安装 NPM 包

    我刚刚开始学习 Angular 6 和 CLI 并创建了一个项目 如下所示 ng new my demo cd my demo ng g library foo prefix my 我的库中没有我想要添加的内容ngx bootstrap因为
  • Scrapy Spider整理抓取过程,不刮任何东西

    我有一只蜘蛛 它会在亚马逊上抓取信息 蜘蛛读取一个 txt 文件 在其中写入它必须搜索的产品 然后进入该产品的亚马逊页面 例如 我使用 keywords laptop 来更改要搜索的产品等 我遇到的问题是蜘蛛无法工作 这很奇怪 因为一周前它
  • 软件开发中的测试人员[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在我的公司 我们开发一种软 件产品 到目前为止 我们还没有任何测试人员 所以基本上开发人员就是测试人员 当然还有客户和用户 不好 我们的团队现在
  • lsnrctl start rane 当我触发此命令时出现此错误

    oracle myserver lsnrctl start rane LSNRCTL for Linux Version 11 2 0 1 0 Production on 27 SEP 2016 23 04 58 Copyright c 1
  • 错误:无法解析“C:\projects\Project-CMS\Project.Web\src”中的“./app/app.module.ngfactory”

    当我为 Angular 5 应用程序创建构建时 出现以下错误 当我创建构建时它工作正常 ng build 当我创建 buildproductttion 时它显示错误 ng build prod 我没有在应用程序中的任何地方使用 ngfact
  • 关闭模态视图控制器时“[CALayer release]:消息发送到已释放的实例”

    这几天我一直在纠结这个问题 找不到解决办法 所以请教一下 我有两个 UIViewController NewPostUIViewController 和 SettingsUIViewController 在第二个中我有一个字段 id
  • 如何访问数据网格模板列文本框文本 WPF C#

    我需要访问 a 中的文本DataGrid的模板列来自代码后面 但我不知道如何 我需要将文本更改为我在上传递给它的任何字符串SelectionChanged事件 有人可以告诉我如何实现这一目标吗 我发现了一个类似的问题here https s
  • 如果存在则更新,否则插入一个查询中[重复]

    这个问题在这里已经有答案了 我有这样的简单表 ID int KEY varchar VALUE int 1 asdf 100 2 fdsa 321 3 ecda 211 我想更新行KEY some
  • 从 SPSS 中的所有变量名称中去除后缀

    我有一个数据集 其中每个变量名称都有后缀 1 这样做是为了指示第一次采访时间点 我想从所有变量中删除这个后缀 但变量有数百个 所以我正在寻找一种方法来完成此操作 而无需数百次使用 RENAME 语句 我找到的最接近相关信息来自下面的链接 用
  • MinGW 中的静态链接库

    假设我有三个 C 源文件 前两个是 LIB lib a 第三个是使用它们的应用程序 第一个是 re c int re int i return i 第二个是 test c int re int Depends on re c int tes
  • 使用相同端口(80)运行多个 java jetty 实例

    例如 我有一个主要临时域 www product com 对于每个客户端 我需要将单独的子域映射到具有相同端口 80 但具有不同实例名称 不同 wars文件 的同一服务器 www client1 product com www client
  • 混淆的效果如何?

    另一个问题 即最佳 NET 混淆工具 策略 https stackoverflow com questions 2525 best net obfuscation tools strategy 询问混淆是否容易使用工具实现 但我的问题是 混
  • mybatis动态sql里面注解

    我使用的是mybatis 3 我正在使用 select 注释在映射器接口内编写选择查询 Example Select select from EMPLOYEE where ID gt 55 public List
  • 为什么使用 zone() 时 momentjs isDST() 返回错误的时间

    我正在尝试检查 isDST 如果夏令时处于活动状态 则返回 true 或 false 如果我使用当前日期时间 它工作正常 例如 var isdst moment isDST 对于我的时区返回 true 但是 我想要做的是首先设置时区偏移量
  • 如何对元组列表进行分组?

    Note 我当然知道如何在显式 for 循环中做到这一点 但我正在寻找一个更具可读性的解决方案 如果可能的话 我想通过使用一些内置功能来解决这个问题 最好的情况是这样的 result groupby logic 假设有以下列表 import
  • 您是否应该更喜欢重载而不是函数模板的专门化?

    我的一本教科书指出 您可以为标准库函数提供自己的实现 例如swap x y 通过模板专门化或函数重载 这对于任何可以从赋值交换以外的东西中受益的类型都很有用 例如 STL 容器 我知道 它已经编写了交换 我的问题如下 更好的是 模板专业化为
  • 向正在等待 TCP 的线程发送指令?

    我试图理解 TCP 中的多线程 所以我正在编写一个基本的 telnet 文本 路由器 using ReadLine 每个使用 TCP 侦听器的线程将等待来自 telnet 客户端的输入 然后根据发送的文本进行响应 我将其与多个线程和多个 t
  • 尝试让 CUDA 7.5 与 GCC 5.x 一起工作

    因此 如果您在系统 GCC 版本为 5 及更高版本时尝试使用 nvcc 则会收到 版本不受支持 错误 但是 我听说人们报告说他们刚刚对此进行了评论 并且 CUDA 7 5 与 GCC 5 x 一起 为他们工作 然而 当我做同样的事情时 支票
  • 如何改变android中数组元素的颜色? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我只是想知道 我们可以更改特定数组索引的颜色吗 我有一个以下数组 String all 1 2 3 4 5 6 7 8 9 10 所以 我想
  • 使用大的静态变量是一个坏主意吗?

    我使用 ASP NET MVC 4 我想加载大量数据并使其在我的所有类中都可以访问 这是我的代码的简约示例 public class MyController Controller public static List