【发布时间】:2011-06-13 05:10:46
【问题描述】:
我正在寻找有关应将应用程序配置数据和默认文本值存储在何处的反馈,以使整体性能最佳。例如,我一直在 web.config 中粘贴默认 URL 值和错误消息或应用程序指令的默认文本等内容,但现在我想知道这是否会扩展......以及它是否是正确的首先要做。
【问题讨论】:
标签: asp.net architecture configuration
我正在寻找有关应将应用程序配置数据和默认文本值存储在何处的反馈,以使整体性能最佳。例如,我一直在 web.config 中粘贴默认 URL 值和错误消息或应用程序指令的默认文本等内容,但现在我想知道这是否会扩展......以及它是否是正确的首先要做。
【问题讨论】:
标签: asp.net architecture configuration
如前所述,这真的无关紧要 - 设置,无论是在 web.config 中还是在数据库中,都应该是“只读一次”然后缓存,所以这真的无关紧要。
我几乎可以保证你的代码的其他部分会比这慢得多。
附带说明,与性能无关,但如果您需要担心站点正常运行时间,您可以在数据库中动态编辑配置,但更改 web.config 将导致 appdomain 重新启动并随后丢失会话.
【讨论】:
如果是单个服务器设置(而不是 Web 场),请将其存储在 Web.Config 文件中。 Web Farm 框架有一个新版本,您可以在此处查看该类型场景的详细信息:
http://weblogs.asp.net/scottgu/archive/2010/09/08/introducing-the-microsoft-web-farm-framework.aspx
【讨论】:
如果数据库在同一台机器上,性能差异可能可以忽略不计。如果您需要跨线访问某个数据库,它很可能会比直接访问且不太大的 web.config 更慢。
我真的希望在这里保持简单,只需使用 web.config。它可能已经被某些系统组件缓存在内存中。如果您觉得它太慢,请测量它,然后可能会寻求更复杂的解决方案。
话虽如此,您可以在应用程序启动时简单地读取所有配置并将其保存在内存中。通过这种方式,任何性能差异都可以减少到应用程序的启动时间。您还可以获得能够在启动时验证配置文件的额外好处。
不确定你的默认值,但问问自己它们是否是特定于环境的,是否真的是你想要在不重新编译的情况下更改的东西。作为配置文件,用例是什么?某些操作人员或开发人员会设置这些默认值吗?您打算记录它们吗?您是否要使您的应用程序对任何配置都具有健壮性? 这些默认值是否将用于多个环境/安装(例如用于本地化)?那么也许最好使用不同的单独文件,您可以在需要时单独重新部署。
【讨论】:
设置多久更改一次?
如果它们从不更改,您可以将它们放在 web.config 中,并配置 IIS,使其不监视文件的更改。这会造成很小的启动损失,但之后应该不会有性能损失。
但老实说,在您开始担心这一点之前,可能还有许多其他地方需要改进 - 请记住,“Premature Optimization is the root of all evil”:)
【讨论】: