Web API 2的静态对象

时间:2016-04-27 15:52:30

标签: c# .net asp.net-web-api2 static-members

我有一个web api 2项目,客户端将请求一些xml格式的数据。这个XML永远不会改变,我想知道如何将它保存在ram中,以便每次需要来自该文件的数据时它都不会反序列化xml。

在启动时将其反序列化然后将其保存在静态变量中是最佳方式,因为它只能用于阅读吗?

 [HttpPost]
 [Route("api/dosomething")]
 public string DoSomething() {

     var myData = XmlSerializer(MyDataStruct).Deserialize(something);
     return myDate;
 }

此处xml仅用于向客户端传递值。我怎样才能使它能够反序列化一次然后直接返回它。使用静态成员会启用此功能吗?

1 个答案:

答案 0 :(得分:1)

使用静态字段的简单缓存方法可能是一个公平的选择:

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输出缓存方法:{{ 3}}