Web 的静态对象 API 2
Static objects for Web API 2
我有一个 Web api 2 项目,客户将请求一些 xml 格式的数据。 XML 永远不会改变,我想知道如何将它保存在 ram 中,这样它就不会在每次需要该文件中的数据时反序列化 xml。
在启动时反序列化它然后将其保存在静态变量中是否是最好的方法,因为它仅用于读取?
[HttpPost]
[Route("api/dosomething")]
public string DoSomething() {
var myData = XmlSerializer(MyDataStruct).Deserialize(something);
return myDate;
}
此处的xml仅用于向客户传达价值。我怎样才能让它反序列化一次,然后 return 直接反序列化。使用静态成员会启用此功能吗?
使用静态字段的简单缓存端方法可能是一个不错的选择:
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.
我有一个 Web api 2 项目,客户将请求一些 xml 格式的数据。 XML 永远不会改变,我想知道如何将它保存在 ram 中,这样它就不会在每次需要该文件中的数据时反序列化 xml。
在启动时反序列化它然后将其保存在静态变量中是否是最好的方法,因为它仅用于读取?
[HttpPost]
[Route("api/dosomething")]
public string DoSomething() {
var myData = XmlSerializer(MyDataStruct).Deserialize(something);
return myDate;
}
此处的xml仅用于向客户传达价值。我怎样才能让它反序列化一次,然后 return 直接反序列化。使用静态成员会启用此功能吗?
使用静态字段的简单缓存端方法可能是一个不错的选择:
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.