FAQ ASP.NET/C#
FAQ ASP.NET/C#Consultez toutes les FAQ
Nombre d'auteurs : 39, nombre de questions : 371, dernière mise à jour : 15 juin 2021
- Comment obtenir la version du .NET Framework en cours ?
- Comment connaître le compte utilisateur utilisé par votre application web ?
- Comment connaître la place mémoire utilisée par une application ASP.NET ?
- Comment connaître l'OS qui héberge ASP.NET ?
- Comment connaître le nom de l'utilisateur Windows utilisé pour se connecter ?
- Est-il toujours nécessaire de verrouiller les variables d'application avant d'y accéder ?
- Comment mesurer précisément le temps d'exécution d'une partie de votre code ?
- Comment remplacer un mot (insensible à la casse) par un autre grâce aux expressions régulières ?
- Comment diviser une classe dans plusieurs fichiers avec .NET 2.0 ?
- Comment fonctionne le Garbage Collector ?
- Comment forcer la libération de la mémoire par le Garbage Collector ?
- Comment visualiser le GAC avec la structure de fichier classique ?
- Malgré que je les ai enregistré, certains de mes composants COM+ VB6 ne fonctionnent pas. Que faire?
Simple à faire mais peu de personnes le trouvent du premier coup...
Version ver =
Environment.
Version;
Response.
Writ
(
"Version Framework = {0}"
,
ver);
Response.
Write
(
"Compte : "
+
Environment.
Username);
Très simple d'utilisation, parfois plus compliqué à trouver :)
Response.
Write
(
"Utilisé: "
+
System.
Environment.
WorkingSet.
ToString
(
) +
" bytes"
);
Response.
Write
(
"Plateforme "
+
System.
Environment.
OSVersion.
ToString
(
) );
Même si cela est simple à écrire, il faut cependant savoir vers quoi s'orienter...
Response.
Write
(
"Utilisateur: "
+
User.
Identity.
Name);
Lorsque nous effectuons un traitement, il est conseillé d'utiliser les locks.
Ceux-ci permettent de verrouiller des parties de code. Il n'est ainsi pas possible d'exécuter simultanément deux parties de code se trouvant dans un bloc verrouillé.
void
NomMethode
(...
)
{
lock
(
this
)
{
// Code à verrouiller
}
}
Lien : Utilisation du Global.asax
Tout d'abord, ajoutez en entête de votre classe:
using
System.
Diagnostics;
Ensuite, ajoutez ceci dans la partie de code qui vous intéresse:
// Instanciation d'un objet StopWatch
StopWatch monStopWatch =
new
Stopwatch
(
);
// Déclenchement du "chronomètre"
monStopWatch.
Start
(
);
// ///////////////////////////////
// Placez ici le code que vous voulez évaluer, cela peut être par exemple du code 'brut' ou
// alors l'appel d'un méthode...
// ///////////////////////////////
// Arrêt du "chronomètre"
monStopWatch.
Stop
(
);
// Le temps écoulé peut être récupéré très facilement avec un membre de StopWatch,
// de la façon suivante. Le résultat est exprimé en millisecondes
long
tempsExecution =
monStopWatch.
ElapsedMilliseconds;
Tout d'abord, ajoutez en entête de votre classe:
using
System.
Text.
RegularExpressions;
Un exemple vaut mieux qu'un long discours:
string
monTexte =
"Une astuce de dvp.com ! Une astuce de dvp.com !"
;
// Paramétrage de notre expression régulière :
// Ici on spécifie que l'on ne veut pas tenir compte dela casse du
// texte dans nos remplacements.
Regex maRegEx =
new
Regex
(
"
\b
dvp.com
\b
"
,
RegexOptions.
IgnoreCase);
// Remplacement des occurences de "dvp.com" par "Developpez.com"
monTexte =
maRegEx.
Replace
(
monTexte,
"Developpez.com"
);
Jusqu'à aujourd'hui une classe devait se trouvait dans un fichier unique, cela posait problème par exemple en cas de codes longs et complexes, ou encore en cas de travail en équipe sur une même classe. Avec l'arrivé du Framework .Net 2.0, il est désormais possible de répartir une classe dans plusieurs fichiers, c'est ce que l'on appelle les classes partielles.
Répartir une classe dans plusieurs fichiers ne présente pas de difficulté, il suffit simplement d'ajouter le mot clé « partial » au début de chaque fichier, le compilateur fera le travail pour réassembler tous ces fichiers, voici un exemple :
public
partial
class
maClasse
{
}
Ce qui suit est extrait d'un échange sur le forum dotnet.
C'est très shématique mais cela résume bien comment le .NET Framework s'y prend pour gérer la mémoire
Le .NET Framework : Salut OS, j'ai des trucs à lancer, j'peux te prendre de la ram ?
L'OS : Hé Salut ! Je t'en pris, sers-toi !
Le .NET Framework : Sympa mec. J't'en prend 50Mo maintenant, j'ai besoin que de 15 Mo,
mais comme ça je te dérange pas si j'ai besoin de plus.
...
Le .NET Framework : Hé l'OS, t'es short niveau mémoire ?
L'OS : Non non, tout va bien.
Le .NET Framework : Bon, alors je garde mes 50 Mo encore un peu.
L'OS : Oki.
...
SQL Server : Bonjour M. l'OS, j'ai un gros besoin de mémoire...au moins 200 Mo.
L'OS : Ben sers-toi donc.
SQL Server : Ouais mais y a plus que 180Mo !
L'OS : Ah OK, attend 2 millisecondes stp...
L'OS : Hé Framework, tu peux me rendre un peu de RAM ?
Le .NET Framework : No problemo, j'te fais ça tout de suite...
Le .NET Framework : Garbage Collector, soit un amour et va rendre de la mémoire à l'OS.
Garbage Collector : J'y cours patron.
C'est clair non ?
Pour forcer le Garbage Collector à libérer la mémoire inutilisée par le .NET Framework, on peut appeller la méthode Collect de la classe GC.
System.
GC.
Collect
(
);
Par contre, pour des raisons qui justifieraient à elles seules un article, il n'est pas conseillé d'appeller GC.Collect() directement. Par conséquent, ne le faites pas à moins d'être un expert du garbage collector.
Il est possible de visualiser le cache global des assemblages (GAC) comme un
répertoire classique.
Le GAC est enregistré en tant que répertoire spécial et c'est la Dll ShFusion qui prend
en charge sa présentation sous l'exploration de fichiers.
En modifiant la clé de registre HKEY_LOCAL_MACHINE\Software\Microsoft\Fusion vous pouvez
intervenir sur son mode de visualisation au sein de l'explorateur.
Pour ce faire, modifier la clé nommée DisableCacheViewer en lui attribuant une valeur
différente de zéro.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
"DisableCacheViewer"=dword:00000001
Cette clé est gérée dynamiquement, il n'est pas nécessaire de relancer les explorateurs de fichiers actifs.
Ajoutez
dans le dessus de la page utilisant ces composants. Cela résoud le problème dans bien des cas.