【发布时间】:2021-07-27 00:09:51
【问题描述】:
我需要在每个页面上显示关于我的应用的一些基本信息(使用 _Layout.cshtml)
目前我正在显示这样的应用版本:
<span>version @(System.Reflection.Assembly.GetExecutingAssembly().GetName().Version)</span>
但是,我还需要包含数据库版本和其他一些配置信息(在应用启动时从数据库中获取)。
我的问题是在哪里保存这些信息以尽可能快地生成页面最有效?我的直觉告诉我,每次获取版本的 System.Reflection 都很慢(但这可能是完全错误的)。
在应用启动时将适当的信息保存到 IConfiguration 是否有意义?在每个页面加载时从 IConfiguration 访问数据是一种有效的处理方式吗?
使用此处所述的 IMemoryCache 会更好吗? https://docs.microsoft.com/en-us/aspnet/core/performance/caching/memory?view=aspnetcore-5.0
在这里使用标签助手有意义吗? (https://www.learnrazorpages.com/razor-pages/tag-helpers/cache-tag-helper)
如果问题有点含糊,我们深表歉意——欢迎提出任何想法(包括告诉我我什么都不担心!)
谢谢。
【问题讨论】:
-
至少有 n+1 个选项可以做到这一点,其中 n 是查看问题的开发人员的数量。即使是“最有效”的问题,也需要更多的信息才能得到很好的回答。什么样的基础设施?响应的 SLA 是什么?应用在给定时间段内收到多少请求?
-
@HereticMonkey - 公平点,实时应用程序的基础设施是单个网络服务器(Windows 服务器 2012)。响应没有 SLA。目前请求级别非常小。它是一个“组织内”应用程序,因此永远不会是超高流量。但是,我想编写我的应用程序,以便它尽可能地扩展。我想尽可能避免在 _Layout.cshtml 中提出昂贵的请求。不一定期望有一个“正确”的答案——只是想知道其他人会如何处理这个问题。
-
查看help center 上的“不要问的问题种类”列表。没有正确答案的开放式“你将如何解决这个问题”并不是 Stack Overflow 的真正主题。
-
我同意下面发布的@NoahStahl 的观点,使用依赖注入将您的数据从数据库传输到页面。而这里我要补充的是,如果需要在布局中显示的数据很小且很少更改,为什么不将它们保存在appsettings.json文件中,这个文件也可以是injected into the view。
标签: asp.net-core razor