【问题标题】:Keep unserializable object in application memory将不可序列化的对象保存在应用程序内存中
【发布时间】:2015-08-14 19:42:52
【问题描述】:

在我的 asp.net 网站上,我使用第三方组件为每个用户提供数据和包含操作。不幸的是,组件初始化非常慢(大约 1-2 秒) - 初始化每个页面请求的时间太长了。

所以我试图将这个对象存储在我的应用程序中。但无论如何,在下一页请求之后它都是空的。当然,简单对象按预期工作。

我已经试过了

  • 静态变量
  • HttpContext.Session
  • HttpContext.Cache
  • 临时数据

在所有情况下,我的应用程序都会忘记所有内容,但我没有收到任何错误。

有什么方法可以将这些对象保存在内存中?

这是我的最小示例。当我将值交换为字符串时,一切正常。有了这个对象,我在 Login 方法中得到了null

public class HomeController : Controller
{
    public static IFrameworkItem Test;
    // GET: Home
    public ActionResult Index()
    {
        Test = FrameworkItem.Create("admin", "admin");
        return View();
    }

    public ActionResult CreateItem(string username, string password)
    {
        var test = HomeController.Test;
        return null;
    }
}

【问题讨论】:

  • 虽然它应该与 static 一起使用,但您可以将它托管在 Windows 服务中,让您的 Web 应用程序与该服务对话。
  • HttpContext.Session 和 HttpContext.Cache 应该记住请求之间的内容...您是否正确初始化它?用户是否登录(HttpContext.Session),您如何使用HttpContext.Cache?
  • @CodeCaster 我想过这个问题,但由于它需要更多(?)开发,我宁愿解决这个问题。
  • @BjørnØyvindHalvorsen 在请求之间,我保存这个对象。重新启动后,我希望这种行为 ;)
  • 我认为这太过分了。这是一件非常简单的事情,应该弄清楚。不需要为此提供服务。这是标准的生命周期过程。在我看来,你会浪费很多时间,并在以后再次遇到这个问题...... :) 测试你是否可以将字符串保存在静态变量中,然后再次检索它......

标签: c# asp.net


【解决方案1】:

好吧,经过更多小时的搜索,我发现这个框架确实记录了一个不在 App_Data 中的文件。所以我猜每次发现文件更改时都会重新启动 ASP.NET 网站。

一个真正糟糕的问题,但现在通过禁止这种行为解决了。

【讨论】:

    猜你喜欢
    • 2015-09-21
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 2011-04-21
    • 2018-03-29
    • 1970-01-01
    相关资源
    最近更新 更多