我有一个 Web API 2 项目,客户端将请求一些 xml 格式的数据。该 XML 永远不会改变,我想知道如何将它保存在 ram 中,这样它就不会在每次需要该文件中的数据时反序列化 xml。
在启动时反序列化它然后将其保存在静态变量中是否是最好的方法,因为它仅用于读取?
[HttpPost]
[Route("api/dosomething")]
public string DoSomething() {
var myData = XmlSerializer(MyDataStruct).Deserialize(something);
return myDate;
}
这里 xml 仅用于向客户端传达值。我怎样才能做到这一点,以便我可以将其反序列化一次,然后直接返回。使用静态成员可以启用此功能吗?
最佳答案
带有静态字段的简单缓存旁路方法可能是一个公平的选择:
private static MyDataStruct _myData;
[HttpPost]
[Route("api/dosomething")]
public string DoSomething() {
if(_myData == null)
{
_myData = new XmlSerializer(typeof(MyDataStruct)).Deserialize(something);
}
return _myData;
}
如果您想要更好的性能并完全跳过 XML 的反序列化和将响应正文序列化为 JSON/XML,那么我强烈建议您采用 HTTP 输出缓存方法,使用像这样的库: AspNetWebApi-OutputCache 。
关于c# - Web API 2 的静态对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36894856/