【问题标题】:What should I load into memory when my app loads?当我的应用程序加载时,我应该将什么加载到内存中?
【发布时间】:2010-12-14 18:47:47
【问题描述】:

我使用序列化将对象保存到文件系统。当我加载应用程序时,我应该将所有对象加载到内存中还是只加载存根(用于搜索功能)?

如果我只加载存根,那么我会在需要时从文件系统加载它们,然后将它们保存在内存中以便快速访问。

数量级是数百条记录而不是数千条记录。

你会推荐哪种方式?

【问题讨论】:

    标签: c# .net memory ram


    【解决方案1】:

    如果对象的大小和数量总是很小,请在启动时加载它们。否则使用存根/代理。

    【讨论】:

      【解决方案2】:

      视情况而定。

      如果你知道它永远不会超过数百个,那么将它们全部放入内存中。

      如果您低估总数的可能性很小,请使用存根。

      这还取决于记录的大小以及它们的更改频率。

      【讨论】:

        【解决方案3】:

        按需加载,并保留在内存中,不要浪费启动时间加载不会使用的东西。

        您甚至可以尝试记录最常请求的项目,然后在启动时加载这些项目。

        【讨论】:

        • +1。被困在维护一个预先加载所有内容的应用程序中,我完全同意。没有理由必须在编译后添加时间才能真正开始执行。它使那些“快速修复”变得非常快。
        • 没有什么比等待应用加载“静态”数据更糟糕的了,如果它不被使用 X-)
        【解决方案4】:

        这实际上取决于您对这些对象的使用场景。应用程序在运行时是否都经常使用它们?它们不经常使用吗?是否有一些经常使用,而另一些则不经常使用?

        另外,您的应用程序将在其上运行的系统的预期资源基线是什么?您要加载的对象是大还是小?即使只有几百个,如果它们都是非常大的物体,那将是一个重要因素。如果您需要一个低调的应用程序,那么按需加载似乎更合乎逻辑。

        如果不了解更多有关预期用途和基线执行环境的信息,这类问题很难回答。它非常主观。

        【讨论】:

          【解决方案5】:

          内存与性能。选择哪一项更重要(或者更确切地说,每一项的重要性)并相应地调整您的对象缓存。

          您甚至可以使用Enterprise Library Caching Block,这可以加快您的实施速度。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-06-06
            • 2010-09-05
            • 2012-05-28
            • 1970-01-01
            • 2012-05-10
            • 2018-03-26
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多