【问题标题】:Static objects for Web API 2Web API 2 的静态对象
【发布时间】:2016-04-27 15:52:30
【问题描述】:

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

在启动时反序列化它然后将其保存在静态变量中是最好的方法,因为它只会用于读取吗?

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

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

这里的 xml 仅用于将值传达给客户端。我怎样才能做到这一点,以便我可以反序列化一次,然后直接返回。使用静态成员会启用此功能吗?

【问题讨论】:

  • 我的想法是使用 ASP.NET 缓存。首次使用时缓存,之后从缓存中提取。
  • 是的 - 静态变量是可行的。您还可以使用 http 缓存。这取决于场景 - 如果它被频繁使用/您不关心内存(或 xml 的大小相当小),请使用静态变量;如果不经常使用或担心内存消耗 - 使用 http 缓存。

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


【解决方案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 输出缓存方法,使用像这样的库:@987654321 @。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 2014-03-22
    • 2014-02-27
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多