mardi 16 janvier 2007

Direct Cast -vs- Int.Parse -vs- Convert.toInt32

J'ai un collèque de travail qui devais convertir un objet en integer. Il m'a demandé quelle était la différence entre un "Cast Direct", un Int.Parse et un Convert.ToInt32.

La question est intéressante et malgré mes nombreuses années d'expérience en programmation, j'était un peu embêté. J'ai donc fait une petite recherche et voici le résultat.

Voici les 3 façon de convertir un objet en Int :

int temp = int.Parse(dataReader["FirstColumn"];
int temp = Convert.ToInt32(dataReader["FirstColumn"]);
int temp = (int)dataReader["FirstColumn"];

Alors, pouvez vous deviner quelle méthode est la plus rapide? Si vous avez choisi la troisième méthode, vous avez raison. Comme le DataReader est un object, vous pouvez faire un "Direct Cast" directement sur l'objet. Des tests de performances ont été fait sur le "Direct Cast" est il serait 3 fois plus rapide que les 2 autres méthodes.

En ce qui concerne le Int.Parse et le Convert.ToInt32, les 2 méthodes vont retourner le même résultat, sauf si la valeur de l'objet ou de la chaine de caractère est null.

Convert.ToInt32(null) va retourner 0, tandis que Int.Parse(null) va retourner une exception de type ArgumentNullException.

Int.Parse converti une chaine de caractère de format nombre en son équivalent 32 bits signé.

Par contre, Convert.ToInt32 est plus puissant car il permet une foule de surcharge (Overload) et il permet aussi d'Appliquer un formattage (globalisation).

quelques exemples:

string mystring = "1234";
int parseResult32 = System.Int32.Parse(mystring); //32 bit signé


short parseResult16 = System.Int16.Parse(mystring); //16 bit signé

La chaine de caractère doit contenir la représentation d'un nombre. Par exemple, elle ne peut pas contenir "12A34" car une exception serait lancée.
Si vous voulez convertir le caractère 'A' ou 0x65 en hexa en integer, vous pouvez utiliser le "Direct Cast" (int).

char c = 'A';
int castedfromchar = (int)c; //retourne 65

en utilisant le "Direct Cast", la variable c doir être un caractère et non pas une chaine de caractère.

byte b = 0x65;
int castedfrombyte = (int)b; //retourne 101

en utilisant le "Direct Cast", la variable c doir être de type byte.

Et voila!!!

Si j'ai oublié des détails, faites moi signe.

lundi 15 janvier 2007

Bug avec le nouveau contrôle ReportViewer

Dernièrement, j'ai eu besoin d'utiliser le ReportViewer dans un de mes projets. J'ai eu une bonne période d'adaptation car j'ai toujours utilisé Crystal Report. Après plusieurs jours d'essais et erreurs, j'ai finalement réussi à produire un rapport décent.

Par contre, lors des test, je me suis rendu compte que lorsque j'utilisais la fonction d'export vers un PDF, le fichier généré était pas mal gros. En fait, pour un PDF de 4 pages avec 2 petites images, j'obtenais un fichier de 1.2 Mo.... C'est innaceptable.

Suite à quelques recherche sur internet, je me rend bien compte que je ne suis pas le seul au prise avec ce problème. Il semble que ce sois un bug connu de Microsoft.

Vous pouvez visualiser tous les bugs rapporté par la communautée et même ajouter les bugs que vous rencontrez à cette adresse :

http://connect.microsoft.com/

Vous pouvez aussi voter pour un bug en particulier et ainsi le faire monter dans l'ordre des bugs les mieux classés.

En ce qui concerne le bug du ReportViewer, il est maintenant en première position. Ce que je trouve bizarre, c'est que le bug semble avoir été fermé en date du 18 Décembre 2006, mais aucune solution n'est indiquée sur le site.

Bonne visite!

Visual Studio 1.1 et Windows Vista

J'ai lu que Visual Studio 1.0 et 1.1 ne pourront plus fonctionner sous Vista!!! Par contre, le framework 1.0 et 1.1 continueront de fonctionner, c'est juste Visual Studio qui ne fonctionnera plus.

Bahhh... Ça ne me dérange pas trop, mais que va t-il se passer avec ces entreprises qui hésitent à mettre à jour leurs outils de développement???

vendredi 12 janvier 2007

Nouveau blog pour .NET

Bonjour et bienvenue sur mon nouveau blog sur la technologies .NET de Microsoft.

Je suis consultant informatique depuis 10 ans et j'habite la région de Montréal. Depuis quelques temps, lorsque je rencontre certaines difficultées et questions, je me dis souvent que je devrais les partager avec les autres et ainsi aider la communauté .NET francophone.

Vous retrouverez sur ce blog des POSTS originaux et aussi des POSTS anglophones d'un peu partout que je vais traduire pour vous.

Je ne suis pas un grand écrivain, mais j'espère aider la communauté avec ce blog. Si vous avez des questions ou des commentaires, il me fera plaisir de vous répondre.