1

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

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

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

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

任何一个或这些选项都会对性能或内存产生影响吗?

4

2 回答 2

3

任何一个或这些选项都会对性能或内存产生影响吗?

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

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

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

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

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

于 2013-10-04T20:24:47.057 回答
2

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

于 2013-10-04T20:14:49.347 回答