2009-04-24 6 views
1

J'ai une application qui affiche un écran de miniatures d'images, chaque image est d'environ 80k et elles sont stockées dans une base de données. Pour que le temps de réponse soit raisonnable, l'appilcation affiche une image d'espace réservé lors du premier démarrage et du téléchargement ultérieur des images à partir du serveur. Je m'attends à montrer environ 40 images sur l'écran à la fois, c'est donc ma taille de lot. Quelle est la meilleure façon de servir ces images au client? J'ai deux options en tête.Méthode la plus efficace pour transférer des images vers un client Silverlight

  1. Créez un service de données ADO.NET qui expose la table de base de données Images au client. Le client peut demander de manière asynchrone les images, une à la fois, et les afficher à mesure qu'elles reviennent du serveur. J'ai implémenté cette solution et cela semble fonctionner correctement; la vitesse n'est pas excellente et je sens que je pourrais mieux utiliser le tube Http en demandant peut-être 3 images à la fois.

  2. Créez un HttpModule sur le serveur qui recherche les requêtes ressemblant à /Images/1.jpg, puis lit la base de données et renvoie les données demandées. Du côté client, je peux avoir plusieurs objets Image dont la source pointe vers les Urls virtuelles sur le serveur. Ma théorie est que simplement en donnant Silverlight beaucoup urls à traiter, il peut être en mesure de transférer les images plus efficacement que mon code dans l'option 1.

Est-ce que l'une de ces méthodes plus efficaces ou est-il une autre technique pour ce faire? Merci!

Répondre

2

Je ne sais pas si c'est plus efficace, mais j'ai accompli une tâche très similaire en utilisant un gestionnaire HTTP (ashx). Le gestionnaire extrait l'image de la base de données en fonction des paramètres de l'uri (image ID), puis Silverlight les récupère de manière asynchrone en définissant la propriété Source d'un contrôle Image sur l'URI du gestionnaire avec l'ID spécifique que je souhaite la chaîne de requête. Le contrôle Image, à son tour, est à l'intérieur d'un ItemsControl qui me permet d'afficher plusieurs images.

0

Nous faisons quelque chose de très similaire, et nous utilisons simplement une page ASPX pour les server avec un paramètre de requête de l'identificateur d'image. Nous mettons également en cache les images et la page ASPX utilisera la valeur mise en cache si elle existe. Sinon, nous l'extrayons du magasin de données, le mettons en cache et l'envoyons vers le bas. Cela fonctionne vraiment bien pour nous.

+0

Est-ce que la mise en cache impliquent l'écriture du code dans la page ASPX? Comment ça marche? –

+0

Nous faisons notre propre mise en cache, mais vous pourriez envisager une sorte de cadre de mise en cache comme Velocity ou MemCached –

0

Avez-vous regardé l'utilisation de Deep Zoom? Il est très efficace sur le chargement progressif des images et vous offre une expérience utilisateur plus agréable lorsque les images sont entièrement chargées.

Exemples:

+0

bonne idée! Je vais essayer ça pour v.next –

Questions connexes