【问题标题】:Is it better to read an xml file once and pass around the values, or read the xml multiple times where needed?一次读取 xml 文件并传递值,还是在需要时多次读取 xml 更好?
【发布时间】:2013-10-11 20:46:00
【问题描述】:

我有一个 Asp.Net MVC Web 应用程序,其中有一个包含大约 40 个值的 xml 配置文件。

我的网络应用程序只有一个页面,但它被分成几个部分视图(每个视图都有自己的模型和控制器)。每个部分都需要使用配置文件中的一些值,但不是全部,尽管有一些重叠。例如,ViewA 需要valueX,ViewB 需要valueXvalueY

我的问题是——在主 HomeController 中读取 .xml 文件是否更好,然后将值传递给所有其他视图/控制器?我不确定我会怎么做。我不能真正将这些值放入模型中,因为每个部分都有自己的模型,而且我不认为我想使用 ViewBag 来存储 40 个值。

还是让每个 Controller 自己读取 xml 文件并只获取它需要的数据更好?这将导致同一个 xml 文件被读取最多 5 次,只是为了加载一个屏幕,然后每次更新部分视图。

其中一个或这些选项会影响性能或内存吗?

【问题讨论】:

    标签: xml asp.net-mvc-4 config viewbag


    【解决方案1】:

    我当前的解决方案不是使用 xml 文件,而是使用全局资源文件 (.resx),我可以从任何地方直接访问这些值。但是如果有一个很好的方法可以用 xml 做到这一点,我仍然有兴趣听到它。

    【讨论】:

      【解决方案2】:

      其中一个或这些选项会影响性能或内存吗?

      是的。多次读取文件比读取一次要慢得多。并且持有这些值会比不持有它们消耗更多的内存。

      但我们不是在谈论大量时间或大量内存,而不仅仅是 40 个值。除非这些值每个都是兆字节。

      有很多方法可以加载和缓存 XML 数据。您可以加载一次——第一次访问应用程序时。或者您可以为每个请求加载它。在我的应用程序中,我在第一次访问应用程序时加载数据。它被加载到本质上是名称/值集合的对象中。我将接口引用传递给每个需要它的控制器。但是后来我使用了 StructureMap,这使得这种事情变得非常容易。

      如果不了解应用程序的结构,很难说哪个更合适。你可以有一个延迟加载的单例对象,你的模型调用它来获取数据。单例对象本身会在首次使用时加载数据。查看 Jon Skeet 的Implementing the Singleton Pattern in C#

      虽然你可能会不必要地担心。如果文件很小,很可能第一次读取会将数据从磁盘获取到缓存中,然后从缓存中满足读取文件的调用。您仍然需要为每个调用解析 XML,但读取文件的成本很低,因为它已经在内存中。如果它现在对您来说运行得足够快,并且您预计请求数量不会发生巨大变化,那么您的努力可能最好花在优化其他东西上。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-18
        • 2013-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多