【问题标题】:how to use asp.net web application to manipulate memory?如何使用asp.net web 应用程序来操作内存?
【发布时间】:2010-12-28 13:24:08
【问题描述】:

要实现的目标:

  • 多组用户交互 使用浏览器。

  • 在每个组中,用户将与一些数据(对象)进行交互。

  • 数据(对象)是从数据库中加载的。在交互过程中,用户需要对同一数据(对象)进行快速同步的查看,因此必须将它们保存在内存中。
  • 数据(对象)在交互过程中会发生变化,但只有此交互的最终结果需要保存回 DB。

我目前的解决方案

将数据(对象)加载到 global.asax 中进行操作。但对于这个解决方案,我有几个问题。

  • 如何确保 Web 应用程序只有一个实例?(在 iis-->应用程序池中配置?)
  • 因为web应用会自行重启,结果应用状态下的所有数据都会丢失。我怎样才能避免应用程序自行重启而不是管理?
  • 在iis应用程序池设置中,我可以设置回收时间,是否保证在此期间不会发生应用程序重启?
  • 或者是否存在可能触发某些事情的事件(在应用程序重新启动之前),以便我可以保存当前应用程序状态并再次加载它们?

  • 或者只有另一种方法可以实现我需要实现的目标?

谢谢

【问题讨论】:

  • 一个明显的问题是 - 为什么这些对象需要在内存中?真的有必要吗?这不太可能只是为了速度,因为与请求通过 Internet 所需的时间相比,按需将对象加载到内存中所花费的时间微不足道。

标签: asp.net state


【解决方案1】:

我认为您不应该试图欺骗 IIS 应用程序池等。只要顺其自然,享受这样一个事实,即扩展应用程序可能会更容易一些。

相反,您应该考虑在单独的服务器(进程)上设置某种共享内存。如果您使用 Memcached 之类的东西来存储这些数据对象,那基本上应该与将其存储在 Web 应用程序的变量中一样,只是它会比 Web 应用程序的生命周期更久。

除非您在一个对象上有大量输入/输出,或者实际上需要实时通信或对象的事件,否则您可能不必担心同步不够……

【讨论】:

    【解决方案2】:

    有 Application_End 事件。但我听说它并不总是被调用。我想值得一试。

    然后,您可以设置应用程序池以根据您的规格进行回收:

    http://remy.supertext.ch/2010/08/iis7-worker-process-reached-its-allowed-processing-time-limit/

    如果您的应用在夜间没有使用,这是一个简单的解决方案。

    像 Memcache 这样的东西显然更专业。我认为 MS 对 IIS7 有类似的东西。

    【讨论】:

      猜你喜欢
      • 2011-01-16
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多