c# - Web API 2 的静态对象

标签 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 仅用于向客户端传达值。我怎样才能做到这一点,以便我可以将其反序列化一次,然后直接返回。使用静态成员可以启用此功能吗?

最佳答案

带有静态字段的简单缓存旁路方法可能是一个公平的选择:

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/

相关文章:

c# - 使用 new 关键字调用基本方法

c# - 在 C# 中创建网络数据包结构/类的最佳方法是什么?

c# - 是否可以在针对 4.7.1 的 WinForms 项目中使用 Path.GetRelativePath (.NET Core2)?

c# - 通过 Controller 使用 ExecuteAsync 测试 IHttpActionResult

c# - ASP.NET 和 IIS 7 - 登录后 IE10 中出现意外 URL

c# - 避免带参数的 SQL 注入(inject)?

.net - 什么是 "+<>c__DisplayClassX"类型后缀,其中 X 是数字?

.net - 更新的 Mirror Api .Net (v1.5.0.33-beta) 客户端出现问题

c# - 使用控制台应用程序创建 ASP.NET Web API

c# - 为什么即使在转换其父类之后,Web API Action 方法也会返回子属性的 Json