在 dotnet core/razor 页面中 store/retrieve 静态数据的最有效方式
Most efficient way to store/retrieve static data in dotnet core/razor pages
我需要在每个页面上显示有关我的应用程序的一些基本信息(使用 _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)
如果问题有点含糊,我们深表歉意 - 欢迎任何想法(包括告诉我我什么都不担心!)
谢谢。
一个选项是创建一个提供版本信息的服务 class,以及 register as a singleton。然后你可以将这个服务注入到你的布局中,以获取你想要根据需要呈现的数据。
_Layout.cshtml:
@inject IMyVersionService versionService
@{
string version = versionService.GetVersion();
}
<!DOCTYPE html>
...
<span>@version</span>
因为服务是单例的,第一次访问会初始化一次,以后访问效率会很高。您可以在构造函数中使用已解析的版本信息设置一个私有字段。
我需要在每个页面上显示有关我的应用程序的一些基本信息(使用 _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)
如果问题有点含糊,我们深表歉意 - 欢迎任何想法(包括告诉我我什么都不担心!)
谢谢。
一个选项是创建一个提供版本信息的服务 class,以及 register as a singleton。然后你可以将这个服务注入到你的布局中,以获取你想要根据需要呈现的数据。
_Layout.cshtml:
@inject IMyVersionService versionService
@{
string version = versionService.GetVersion();
}
<!DOCTYPE html>
...
<span>@version</span>
因为服务是单例的,第一次访问会初始化一次,以后访问效率会很高。您可以在构造函数中使用已解析的版本信息设置一个私有字段。