好的,所以我有一个可以获得相当多流量的应用。我一直在与Microsoft Azure和Coding团队合作解决内存问题。他们已经看到了GB的日志,以及当我们处于高负荷状态时,Microsoft.Extensions.Configuration代码如何占据RAM的大部分份额。
在我的API代码中,我有一个所有其他控制器继承的“基本控制器”。这允许我分享常用方法等。在这个基本控制器中,我创建了一个全局变量:
public IConfigurationRoot _configuration { get; }
我相信这是罪魁祸首......但我不知道如何摆脱它。这个_configuration变量允许我访问我的appsettings.json环境变量。我不知道如何以不同的方式访问这些内容。
例如......在GET调用中,我需要知道是否有缓存。
bool isCaching = bool.Parse(_configuration["Data:Cache"]);
我有一个想法是将_configuration设置为BaseController私有,并在其中创建方法以获取我需要的属性(即缓存),以便其他控制器不必传递此_configuration
宾语。
不确定是否私有化会做任何事情......
答案 0 :(得分:2)
我不确定为什么你需要一遍又一遍地解析相同的值,只需在启动期间读取配置文件并重复使用它:
public class MyConfiguration
{
public bool CachingEnabled { get; set; }
// more configuration data
}
public void ConfigureServices(IServiceCollection services)
{
// your existing configuration
var myConfiguration = new MyConfiguration
{
CachingEnabled = bool.Parse(Configuration["Data:Cache"]),
// other properties
}
// register the data as a singleton since it won't change
services.AddSingleton(myConfiguration);
}
public class MyController : Controller
{
private readonly MyConfiguration configuration;
public MyController(MyConfiguration config)
{
configuration = config;
}
}