2010-12-15 57 views
0

Je dois faire face à une classe qui prend environ 2-3 minutes à charger. Cet objet est du côté serveur d'un projet Silverlight/ASP/WCF. Une fois chargé, cet objet contiendra une liste de 5 000 000 objets plus petits qui seront utilisés pour effectuer certains calculs.Grand objet dans le projet Silverlight/ASP.NET/WCF?

Cela ne dérange pas les utilisateurs d'attendre 2 ou 3 minutes lorsque l'application est en cours de chargement, mais ils ne veulent pas attendre à nouveau chaque fois qu'ils calculent quelque chose.

J'aimerais avoir vos commentaires sur mes options.

Option A: Conserve le grand objet dans une variable de session. Certaines personnes affirment que la variable de session est un poison ... surtout lorsqu'elle est utilisée avec un objet volumineux. Est-ce vraiment si mauvais?

Option B: Chargez le grand objet lorsque le démarrage du serveur, puis trouver un moyen de partager ou dupliquer cet objet entre les sessions

Option C (Celui-ci travaillerait ... mais pas parfait): Créez deuxième objet qui va copier l'objet de 5 000 000 de ma classe qui prend beaucoup de temps puis l'envoyer au client. Cependant, cette solution n'est pas parfaite car ces 5 000 000 d'objets sont des données sensibles qui ne devraient pas être accessibles «en l'état» côté client.

+0

Pouvez-vous fournir des indices quant à la raison pour laquelle il est logique de copier 5 000 000 objets sur le client? Vous ne pouvez pas effectuer le calcul sur le serveur, où les données existent déjà? –

+0

Effectuer le calcul du côté serveur est ce que je voudrais faire ... c'est pourquoi je préfère utiliser l'option A ou B. L'option C est plus comme une solution de contournement. –

+0

les données que vous avez envoyées sur le serveur peuvent être cryptées .. mais si vous stockez des données dans les cookies, vous devez aussi sérialiser votre objet ... et les cookies ont un espace limité .. –

Répondre

1

vous donnez trois méthodes, la première et la deuxième méthode, utilisez la vue, je pense que ce ne sont pas les bonnes idées.

Je suggère, si vous avez la grande mémoire, vous pouvez changer la classe en classe statique. parce que la classe statique ne l'utilise pas.

ou vous pouvez utiliser le cache pour mettre en cache l'instance.

+0

J'aime vraiment la solution de classe statique! Et cela n'implique pas beaucoup de changements dans ma classe (changez-le en static/thread safe) –