2010-01-16 6 views
2

J'utilise ADO.NET pour communiquer certains db, et la recherche d'un moyen d'éviter la boxe lors de la définition de la propriété DbParameter.Value à valeur-type.Évitez de boxer dans DbParameter.Value?

Y at-il un moyen d'éviter la boxe dans DbParameter.Value?

Merci.

Répondre

2

Je ne pense pas. Si vous examinez la propriété Value de la classe SqlParameter dans Reflector, vous verrez que le champ interne dans lequel la valeur est stockée est également de type object. Il n'y a pas de place pour stocker des ints ou des flotteurs ou quoi que ce soit d'autre.

7

Pourquoi voulez-vous l'éviter? Le coût de performance de la boxe est probablement presque nul dans le contexte de la couche globale d'accès aux données. Sérialiser la valeur du paramètre sur le fil seul est probablement 100 fois le coût de la boxe. Voyez-vous un problème de performance attribuable à la boxe?

+0

Le problème n'est pas avec la boxe elle-même, le problème est avec le GC qui a besoin de rassembler toutes ces versions en boîte plus tard. Le processus qui l'exécute consomme 100% de CPU, donc je veux optimiser toutes ces petites choses qui peuvent faire fonctionner GC plus longtemps. – DxCK

+0

Je ne pense pas que l'utilisation du processeur à 100% est causée au GC. Le GC ne fonctionne pas de façon permanente, il fonctionne quand il le faut ... –

2

Vous ne pouvez pas éviter d'utiliser des valeurs encadrées, mais vous pouvez éviter la boxe actuelle. Ou plutôt, vous pouvez changer comment et quand la boxe se produit.

Vous pouvez préparer des valeurs en boîte à utiliser dans les paramètres, par exemple:

object[] boxedIntegers = new object[100]; 
for (int i = 0; i < boxedIntegers.Length; i++) { 
    boxedIntegers[i] = i; 
} 

Tant que vous gardez le tableau, les valeurs en boîte peuvent être utilisées à plusieurs reprises sans causer plus de boxe, et ils ne pas être collecté jusqu'à ce que le tableau ne soit plus utilisé.

Il est douteux que la boxe cause vraiment des problèmes de performances, mais maintenant vous avez un moyen de faire des tests réels au moins.

Questions connexes