Table des matières
1 Lire la version du système d'exploitation et du CLR
Maison développement back-end Tutoriel C#.Net Introduction détaillée à 10 extraits de code pratiques fréquemment utilisés par les programmeurs C#

Introduction détaillée à 10 extraits de code pratiques fréquemment utilisés par les programmeurs C#

Mar 09, 2017 pm 03:40 PM

10 extraits de code pratiques fréquemment utilisés par les programmeurs C# sont présentés en détail :

1 Lire la version du système d'exploitation et du CLR

OperatingSystem os = System.Environment.OSVersion;
Console.WriteLine(“Platform: {0}”, os.Platform);
Console.WriteLine(“Service Pack: {0}”, os.ServicePack);
Console.WriteLine(“Version: {0}”, os.Version);
Console.WriteLine(“VersionString: {0}”, os.VersionString);
Console.WriteLine(“CLR Version: {0}”, System.Environment.Version);
Copier après la connexion

​Dans mon système Windows 7, les informations suivantes sont affichées

Plateforme : Win32NT
Pack de services :
Version : 6.1.7600.0
VersionString : Microsoft Windows NT 6.1.7600.0
Version CLR : 4.0.21006.1

2. Lisez le nombre de processeurs et la capacité de mémoire

Les informations requises peuvent être lues via l'interface fournie par Windows Management Instrumentation (WMI).

private static UInt32 CountPhysicalProcessors()
{
     ManagementObjectSearcher objects = new ManagementObjectSearcher(
        “SELECT * FROM Win32_ComputerSystem”);
     ManagementObjectCollection coll = objects.Get();
     foreach(ManagementObject obj in coll)
    {
        return (UInt32)obj[“NumberOfProcessors”];
    } 
    return 0;
}
private static UInt64 CountPhysicalMemory()
{
   ManagementObjectSearcher objects =new ManagementObjectSearcher(
      “SELECT * FROM Win32_PhysicalMemory”);
   ManagementObjectCollection coll = objects.Get();
   UInt64 total = 0;
   foreach (ManagementObject obj in coll)
   {
       total += (UInt64)obj[“Capacity”];
    }
    return total;
}
Copier après la connexion

Veuillez ajouter une référence à l'assembly System.Management pour garantir que le code peut être compilé correctement.

Console.WriteLine(“Machine: {0}”, Environment.MachineName);
Console.WriteLine(“# of processors (logical): {0}”, Environment.ProcessorCount);
Console.WriteLine(“# of processors (physical): {0}”  CountPhysicalProcessors());
Console.WriteLine(“RAM installed: {0:N0} bytes”,  CountPhysicalMemory());
Console.WriteLine(“Is OS 64-bit? {0}”,   Environment.Is64BitOperatingSystem);
Console.WriteLine(“Is process 64-bit? {0}”,  Environment.Is64BitProcess);
Console.WriteLine(“Little-endian: {0}”, BitConverter.IsLittleEndian);
foreach (Screen screen in  System.Windows.Forms.Screen.AllScreens)
{
     Console.WriteLine(“Screen {0}”, screen.DeviceName);
     Console.WriteLine(“\tPrimary {0}”, screen.Primary);
     Console.WriteLine(“\tBounds: {0}”, screen.Bounds);
     Console.WriteLine(“\tWorking Area: {0}”,screen.WorkingArea);
     Console.WriteLine(“\tBitsPerPixel: {0}”,screen.BitsPerPixel);
}
Copier après la connexion

3. Lisez la paire clé-valeur du registre

using (RegistryKey keyRun = Registry.LocalMachine.OpenSubKey(@”Software\Microsoft\Windows\CurrentVersion\Run”))
{
    foreach (string valueName in keyRun.GetValueNames())
    {
     Console.WriteLine(“Name: {0}\tValue: {1}”, valueName, keyRun.GetValue(valueName));
    }
}
Copier après la connexion

Veuillez ajouter l'espace de noms Microsoft.Win32 pour vous assurer que le code ci-dessus peut être compilé.

4 Démarrez et arrêtez les services Windows

Les fonctions pratiques fournies par cette API sont souvent utilisées pour gérer des services dans des applications sans avoir à passer par les services de gestion dans le panneau de configuration.

<p style="margin-bottom: 7px;">ServiceController controller = new ServiceController(“e-M-POWER”);      <br/>controller.Start();      <br/>if (controller.CanPauseAndContinue)      <br/>{      <br/>    controller.Pause();      <br/>    controller.Continue();      <br/>}      <br/>controller.Stop();<br/></p>
Copier après la connexion

Dans l'API fournie par .net, vous pouvez installer et désinstaller des services en une seule phrase

 if (args[0] == "/i")
 {
       ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetExecutingAssembly().Location });
 }
 else if (args[0] == "/u")
 {
   ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetExecutingAssembly().Location });
 }
Copier après la connexion

Comme indiqué dans le code, transmettez le paramètre i ou u à l'application pour indiquer s'il faut désinstaller ou installer le programme.

5. Vérifiez si le programme a un nom fort (P/Invoke)

Par exemple, dans un programme, afin de vérifier si l'assembly est signé, la méthode suivante peut être appelée

[DllImport("mscoree.dll", CharSet=CharSet.Unicode)]
static extern bool StrongNameSignatureVerificationEx(string wszFilePath, bool fForceVerification, ref bool  pfWasVerified);

bool notForced = false;
bool verified = StrongNameSignatureVerificationEx(assembly, false, ref notForced);
Console.WriteLine("Verified: {0}\nForced: {1}", verified, !notForced);
Copier après la connexion

Cette fonction est couramment utilisée dans les méthodes de protection logicielle et peut être utilisée pour vérifier les composants signés. Même si votre signature est supprimée ou si les signatures de tous les assemblys sont supprimées, tant qu'il y a ce code d'appel dans le programme, l'exécution du programme peut être arrêtée.

6. Répondre aux modifications apportées aux éléments de configuration du système

Par exemple, après avoir verrouillé le système, si QQ ne se ferme pas, il affichera un statut occupé.

Veuillez ajouter l'espace de noms Microsoft.Win32, puis enregistrer les événements suivants.

. DisplaySettingsChanged (y compris la modification) des paramètres d'affichage
. . Modifications de police InstalledFontsChanged
. .PaletteChanged
. PowerModeModification de l'état d'alimentation
. .SessionEnded (L'utilisateur se déconnecte ou la session est terminée)
.SessionSwitch (Changer l'utilisateur actuel)
. TimeChanged L'heure a changé
. UserPreferenceChanged (le numéro de préférence utilisateur inclut le changement)

. Notre système ERP surveillera si l'heure du système a changé. Si l'heure est ajustée en dehors de la plage du fichier de licence ERP, le logiciel ERP deviendra indisponible.

7. Utilisez les nouvelles fonctionnalités de Windows 7

Le système Windows 7 introduit de nouvelles fonctionnalités, telles que la boîte de dialogue Ouvrir un fichier, et la barre d'état peut afficher la progression de la tâche en cours.

Microsoft.WindowsAPICodePack.Dialogs.CommonOpenFileDialog ofd = new  Microsoft.WindowsAPICodePack.Dialogs.CommonOpenFileDialog();
ofd.AddToMostRecentlyUsedList = true;
ofd.IsFolderPicker = true;
ofd.AllowNonFileSystemItems = true;
ofd.ShowDialog();
Copier après la connexion

L'utilisation de cette méthode pour ouvrir une boîte de dialogue a plus de fonctions que OpenFileDialog dans la propre bibliothèque de classes de BCL. Cependant, il est limité aux systèmes Windows 7, donc pour appeler ce code, vous devez également vérifier que la version du système d'exploitation est supérieure à 6, et ajouter une référence à l'assembly Windows API Code Pack pour Microsoft®.NET Framework. Veuillez vous rendre à cette adresse pour télécharger http ://www.php.cn/

8 Vérifiez la consommation mémoire du programme

Utilisez la méthode suivante pour vérifier la quantité de mémoire allouée par .NET au programme

long available = GC.GetTotalMemory(false);
Console.WriteLine(“Before allocations: {0:N0}”, available);
int allocSize = 40000000;
byte[] bigArray = new byte[allocSize];
available = GC.GetTotalMemory(false);
Console.WriteLine(“After allocations: {0:N0}”, available);
Copier après la connexion

​Dans mon système, le résultat de son fonctionnement est le suivant

Before allocations: 651,064
After allocations: 40,690,080
Copier après la connexion

Utilisez la méthode suivante pour vérifier la mémoire occupée par l'application actuelle

Process proc = Process.GetCurrentProcess();
Console.WriteLine(“Process Info: “+Environment.NewLine+
Copier après la connexion
 “Private Memory Size: {0:N0}”+Environment.NewLine +
“Virtual Memory Size: {1:N0}” + Environment.NewLine +
Copier après la connexion
“Working Set Size: {2:N0}” + Environment.NewLine +
“Paged Memory Size: {3:N0}” + Environment.NewLine +
“Paged System Memory Size: {4:N0}” + Environment.NewLine +
Copier après la connexion
  “Non-paged System Memory Size: {5:N0}” + Environment.NewLine,
proc.PrivateMemorySize64,   proc.VirtualMemorySize64,  proc.WorkingSet64,  
proc.PagedMemorySize64, proc.PagedSystemMemorySize64,  proc.NonpagedSystemMemorySize64 );
Copier après la connexion

9. Utilisez un chronomètre pour vérifier la durée du programme

Si vous craignez qu'un code prenne beaucoup de temps, vous pouvez utiliser StopWatch pour vérifier le temps consommé par ce code, comme indiqué dans le code suivant

System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
timer.Start();
Decimal total = 0;
int limit = 1000000;
for (int i = 0; i < limit; ++i)
{
      total = total + (Decimal)Math.Sqrt(i);
}
timer.Stop();
Console.WriteLine(“Sum of sqrts: {0}”,total);
Console.WriteLine(“Elapsed milliseconds: {0}”,
timer.ElapsedMilliseconds);
Console.WriteLine(“Elapsed time: {0}”, timer.Elapsed);
Copier après la connexion

Il existe désormais des outils spéciaux pour détecter la durée d'exécution du programme, qui peuvent être affinés pour chaque méthode, comme le logiciel dotNetPerformance.

En prenant le code ci-dessus comme exemple, vous devez modifier directement le code source, ce qui est quelque peu gênant s'il est utilisé pour tester le programme. Veuillez vous référer à l'exemple ci-dessous.

class AutoStopwatch : System.Diagnostics.Stopwatch, IDisposable
{
   public AutoStopwatch()
   { 
       Start();
   }
   public void Dispose()
   {
       Stop();
       Console.WriteLine(“Elapsed: {0}”, this.Elapsed);
   }
}
Copier après la connexion

À l'aide de la syntaxe, comme indiqué dans le code suivant, vous pouvez vérifier le temps d'exécution d'un morceau de code et l'imprimer sur la console.

using (new AutoStopwatch())
{
    Decimal total2 = 0;
    int limit2 = 1000000;
    for (int i = 0; i < limit2; ++i)
    {
       total2 = total2 + (Decimal)Math.Sqrt(i);
    }
}
Copier après la connexion

10 Utilisez le curseur

Lorsque le programme exécute une opération de sauvegarde ou de suppression en arrière-plan, l'état du curseur doit être modifié en occupé. Utilisez les conseils suivants.

class AutoWaitCursor : IDisposable
{
private Control _target;
private Cursor _prevCursor = Cursors.Default;
public AutoWaitCursor(Control control)
{
   if (control == null)
   {
     throw new ArgumentNullException(“control”);
   }
   _target = control;
   _prevCursor = _target.Cursor;
   _target.Cursor = Cursors.WaitCursor;
}
public void Dispose()
{
   _target.Cursor = _prevCursor;
}
}
Copier après la connexion

L'utilisation est la suivante. Cette façon d'écrire est d'anticiper que le programme puisse lever une exception

using (new AutoWaitCursor(this))
{
...
throw new Exception();
}
Copier après la connexion

Comme le montre le code, même si une exception est levée, le curseur peut être restauré à son état précédent.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Active Directory avec C# Active Directory avec C# Sep 03, 2024 pm 03:33 PM

Guide d'Active Directory avec C#. Nous discutons ici de l'introduction et du fonctionnement d'Active Directory en C# ainsi que de la syntaxe et de l'exemple.

Sérialisation C# Sérialisation C# Sep 03, 2024 pm 03:30 PM

Guide de sérialisation C#. Nous discutons ici de l'introduction, des étapes de l'objet de sérialisation C#, du fonctionnement et de l'exemple respectivement.

Générateur de nombres aléatoires en C# Générateur de nombres aléatoires en C# Sep 03, 2024 pm 03:34 PM

Guide du générateur de nombres aléatoires en C#. Nous discutons ici du fonctionnement du générateur de nombres aléatoires, du concept de nombres pseudo-aléatoires et sécurisés.

Vue Grille de données C# Vue Grille de données C# Sep 03, 2024 pm 03:32 PM

Guide de la vue Grille de données C#. Nous discutons ici des exemples de la façon dont une vue de grille de données peut être chargée et exportée à partir de la base de données SQL ou d'un fichier Excel.

Modèles en C# Modèles en C# Sep 03, 2024 pm 03:33 PM

Guide des modèles en C#. Nous discutons ici de l'introduction et des 3 principaux types de modèles en C# ainsi que de ses exemples et de l'implémentation du code.

Nombres premiers en C# Nombres premiers en C# Sep 03, 2024 pm 03:35 PM

Guide des nombres premiers en C#. Nous discutons ici de l'introduction et des exemples de nombres premiers en c# ainsi que de l'implémentation du code.

Factorielle en C# Factorielle en C# Sep 03, 2024 pm 03:34 PM

Guide de Factorial en C#. Nous discutons ici de l'introduction de factorial en c# ainsi que de différents exemples et de l'implémentation du code.

La différence entre le multithreading et le C # asynchrone La différence entre le multithreading et le C # asynchrone Apr 03, 2025 pm 02:57 PM

La différence entre le multithreading et l'asynchrone est que le multithreading exécute plusieurs threads en même temps, tandis que les opérations effectuent de manière asynchrone sans bloquer le thread actuel. Le multithreading est utilisé pour les tâches à forte intensité de calcul, tandis que de manière asynchrone est utilisée pour l'interaction utilisateur. L'avantage du multi-threading est d'améliorer les performances informatiques, tandis que l'avantage des asynchrones est de ne pas bloquer les threads d'interface utilisateur. Le choix du multithreading ou asynchrone dépend de la nature de la tâche: les tâches à forte intensité de calcul utilisent le multithreading, les tâches qui interagissent avec les ressources externes et doivent maintenir la réactivité de l'interface utilisateur à utiliser asynchrone.

See all articles