2011-07-04 2 views
3

Nous construisons un service Web et anticipons le retour de données importantes.Service Web avec grand résultat

Comment ASP.Net et IIS 6 géreront-ils cela? Quel genre de choses pouvons-nous faire pour que cela soit moins gourmand en ressources? Par exemple, nous avons actuellement une classe sérialisable, qui possède une propriété qui est un tableau d'un autre type de classe sérialisable. Lorsque le service Web est appelé, il interroge un grand nombre d'enregistrements à partir de la base de données, instancie la classe, remplit la propriété array, puis renvoie la classe qui est sérialisée.

Comment cela se passe-t-il sous le capot? J'imagine que l'ensemble de l'objet DataSet est stocké en mémoire, puis l'objet sérialisable entier est stocké dans le membre, puis sérialisé et le xml entier est en mémoire, et finalement diffusé à l'appelant.

Y a-t-il des choses que je peux faire pour réduire la consommation de mémoire, comme la diffusion des résultats lors de la lecture de la base de données? Est-ce possible?

+0

Ancien service Web ou service WCF hébergé sur IIS? –

+0

Service Web à l'ancienne. – Jeremy

+0

@Jeremy: la réponse est "n'utilisez pas de services web à l'ancienne pour un nouveau développement". –

Répondre

1

Je ne suis pas sûr que le simple fait d'utiliser la fonction WCF est la réponse, car la question est vraiment de savoir si les données sont demandées.

Il y a plusieurs choses à considérer, même avant de choisir votre méthode de service preferred:

Pouvez-vous mettre en cache les données? S'il est possible de stocker les données en mémoire, cela empêcherait le tirage à chaque fois que les données sont demandées. Toutefois, si la taille des données est prohibitive, vous pouvez envisager d'écrire les données de la base de données dans le fichier et de les diffuser à partir de là.

Vous pourriez envisager quelque chose comme Redis avec son mode VM. Cela vous permettrait de mettre en cache les données, mais si vous n'y accédez pas fréquemment, les données pourraient être écrites dans un fichier pour éviter une utilisation excessive de la mémoire.

Y at-il un moyen, l'appel à la base de données peut être divisé en plusieurs appels plus efficaces?

Vous pouvez envisager d'appeler les données de manière asynchrone si le délai d'exécution de l'appel est long.

Enfin, est-il essentiel que les données soient servies en tant que service Web? Les données peuvent-elles être traitées comme un document XML?

+0

WCF va résoudre ce problème, tout d'abord en ne faisant pas quatre copies du message en mémoire à la fois; en second lieu, si possible, un service WCF peut utiliser TCP/IP et binaire au lieu de HTTP et SOAP; Troisièmement, si nécessaire, WCF peut faire du vrai streaming. –

+0

@John - WCF peut-il effectuer un véritable streaming si l'application appelante ne prend en charge que le modèle de service Web tranditional? – Jeremy

+0

@John: Je suis d'accord que WCF est supérieur et peut être le service approprié, mais comme je le dis, avant de choisir le service, d'autres choses devraient être considérées. – Digbyswift