Browsed by
Month: September 2010

Différences entre ressources et content.

Différences entre ressources et content.

Lorsque l’on ajoute une image a un projet, on est confronté à choisir entre la mettre en ressources et la mettre en contenu (build action). Nous allons donc étudier la différence entre les deux actions et surtout les avantages et inconvénients de chacune.

La différence

La principale différence entre les deux types est qu’une ressource est incluse dans la dll, alors qu’un contenu est un fichier a coté de la dll (à ne pa confondre avec l’isolated Storage qui est un répertoire bien distinct dans le monde silverlight).

Pour bien comparer les deux types, il suffit se “dézipper” un xap (renommez le en zip et ouvrez le avec votre gestionnaire de fichiers compressés favoris) et de voir qu’en effet, on retrouve bien nos images mises en contenu et que nos images mises en ressources ne sont pas visible.

Comment référencer un fichier

Chemin relatif au xaml/cs

Avec un chemin relatif, on rencontre peu de problème. Que votre image soit contenue ou en ressource, il suffit d’écrire le path depuis votre xaml/cs d’appel :

exemple : ‘../monImage.png’, ‘monImage.png’ ou encore ‘dossier/monImage.png’

Chemin relatif au root

Pour une image ‘contenue’

En réalité, on parle plutôt de chemin relatif au root. Pour référencer un fichier “contenu”, il suffit d’utiliser une uri commençant par un slash.

en xaml :

<Image Stretch="None" Source="/images/monImage.png"/>

en C# :

Uri uri = new Uri("/images/monImage.png", UriKind.Relative);
BitmapImage imgSource = new BitmapImage(uri);

Pour une image en ressource

Pour référencer un fichier en ressource c’est un peu plus compliqué, il faut utiliser :

<nom du projet>;component/<path>

en XAML :

<Image Source="/MonProjet;component/images/monImage.png"/>

en C# :

Uri uri = new Uri("/MonProjet;component/images/monImage.png", UriKind.Relative);
this.Image.Source = new BitmapImage(uri);

Vous l’aurez compris, si vous avez besoin de renommer votre projet, il faudra aussi faire attention modifier les uri correspondant aux ressources.

Performances

Un fichier ressource sera chargé plus rapidement lorsque essayera de le référencer, toutefois le lancement de l’application se verra ralenti. Il est donc conseillé d’utiliser les ressources pour des fichiers indispensables au lancement de l’application, comme par exemple le fond d’écran. A l’inverse un fichier en content, n’aura aucun impacts sur le

lancement de l’application, mais son chargement quand on le référencera sera plus lent.

Savoir si une collection est vide de façon optimale

Savoir si une collection est vide de façon optimale

Les collections .Net ne disposent pas de la fonction IsEmpty, elle
peut toutefois être remplacé par l’appel a d’autres méthodes. Nous allons voir
dans cet article quelles sont les méthodes les plus efficaces selon le
type de la collection.

On va donc différencier deux types de collection, le type parcourable,
où on peut accéder a n’importe quel éléments et le type énumerable, où l’on parcourt les éléments les un à la suite des autres.

Les collections parcourables

On compte parmis elle : les List, Dictionary, Hashtable, etc…

Toutes ses collections garde en local le nombre d’éléments, donc si on
le demande, cela ne nous coutera rien. Elle dispose d’un propriété
Count (et non d’une méthode, attention à la différence ).

On utilisera l’instruction suivante pour savoir si une liste est vide :

var isEmpty=(maliste.Count==0);

Les collections énumerable.

Si on demande a une énumération de compter son nombre d’éléments, elle
va parcourir l’ensemble de ses enfants afin de vous répondre, sur une
grosse collection, ceci a un coût.

On va donc utiliser une autre méthode : Any(), cette fonction nous
retourne un booléen indiquant s’il existe au moins un élément. Dans
les faits, elle va uniquement regarder le pointeur vers le premier
enfant et vous retourner s’il est différent de nul. Ainsi, on
s’économise le parcours entier de la collection.

var isEmpty=!monEnum.Any();

Conclusion :

S’il existe une propriété Count, l’utiliser, sinon utiliser Any(),
mais ne jamais utiliser la méthode Count() dans d’autres usages que de
connaitre le nombre d’éléments