2016-04-27 1 views
0

J'ai un projet web api 2, le client demandera des données au format xml. Que XML ne changera jamais et je me demande comment je pourrais le garder en mémoire vive afin qu'il ne désérialise pas le xml chaque fois qu'il a besoin de données à partir de ce fichier.Objets statiques pour l'API Web 2

La désérialiser au lancement et ensuite la conserver dans une variable statique est la meilleure façon de l'utiliser uniquement pour la lecture?

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

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

Ici, le fichier XML est uniquement utilisé pour communiquer des valeurs aux clients. Comment puis-je faire pour que je puisse le désérialiser une fois et ensuite le retourner directement. Est-ce que l'utilisation d'un membre statique activerait cette fonctionnalité?

+0

Copie possible de [ASP.NET: à quelle fréquence la classe WebService est-elle instanciée? Comment faire un objet persistant dedans?] (Http://stackoverflow.com/questions/2117582/asp-net-how-often-is-webservice-class-instanciated-how-to-make-a-persistent-ob – GSerg

+0

Ma pensée serait d'utiliser le cache ASP.NET. Cache lors de la première utilisation, puis extrait du cache après cela. – Kevin

+0

Oui - variable statique peut être moyen de faire. Vous utilisez également le cache http. Cela dépend du scénario - s'il est utilisé fréquemment/vous n'êtes pas concerné par la mémoire (ou la taille de xml est plutôt petite) utilisez une variable statique; s'il n'est pas utilisé fréquemment ou si la consommation de mémoire est un problème, utilisez le cache http. –

Répondre

0

Une approche de cache côté simple avec un champ statique pourrait être une option juste:

private static MyDataStruct _myData; 

[HttpPost] 
[Route("api/dosomething")] 
public string DoSomething() { 
    if(_myData == null) 
    { 
     _myData = new XmlSerializer(typeof(MyDataStruct)).Deserialize(something); 
    } 

    return _myData; 
} 

Si vous voulez encore de meilleures performances et complètement sauter à la fois la désérialisation de votre XML et la sérialisation de votre corps de réponse en JSON/XML, alors je vous suggère fortement une approche de mise en cache de sortie HTTP, en utilisant une librairie comme celle-ci: AspNetWebApi-OutputCache.