ホームページ  >  記事  >  バックエンド開発  >  C# プログラマーが頻繁に使用する 10 個の実用的なコード スニペットの詳細な紹介

C# プログラマーが頻繁に使用する 10 個の実用的なコード スニペットの詳細な紹介

黄舟
黄舟オリジナル
2017-03-09 15:40:141258ブラウズ

C# プログラマーがよく使用する 10 個の実用的なコード スニペットの詳細な紹介:

1 オペレーティング システムと 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);

私のWindows 7システムでは、次の情報が出力されます

プラットフォーム: Win32NT
サービスパック:
バージョン: 6.1.7600.0
バージョン文字列: Microsoft Windows NT 6.1.7600.0
CLR バージョン: 4.0.21006.1

2 CPU の数とメモリ容量を読み取ります

必要な情報は、Windows Management Instrumentation (WMI) が提供するインターフェイスを通じて読み取ることができます。

りー

コードが正しくコンパイルできることを確認するには、アセンブリ System.Management への参照を追加してください。

りー

3 レジストリのキーと値のペアを読み取ります

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;
}

上記のコードを確実にコンパイルできるように、名前空間 Microsoft.Win32 を追加してください。

4 Windows サービスの開始と停止

この API によって提供される実用的な機能は、コントロール パネルの管理サービスに移動することなく、アプリケーション内のサービスを管理するためによく使用されます。

りー

.net が提供する API では、インストールとアンインストールのサービスを一文で実装できます

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);
}

コードに示されているように、i または u パラメーターをアプリケーションに渡して、プログラムをアンインストールするかインストールするかを示します。

5. プログラムに厳密な名前 (P/Invoke) があるかどうかを確認します

たとえば、プログラムでアセンブリが署名されているかどうかを確認するには、次のメソッドを呼び出すことができます

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));
    }
}

この関数はソフトウェア保護方法で一般的に使用され、署名されたコンポーネントを検証するために使用できます。署名が削除された場合、またはすべてのアセンブリの署名が削除された場合でも、プログラム内にこの呼び出しコードが存在する限り、プログラムの実行を停止できます。

6 システム構成項目の変更への対応

たとえば、システムをロックした後、QQ が終了しない場合、ビジー状態が表示されます。

名前空間 Microsoft.Win32 を追加して、次のイベントを登録してください。

. DisplaySettingsChanged (変更を含む) ディスプレイ設定
.InstalledFontsChanged フォントの変更
.パレット変更されました
. PowerMode 電源ステータスが変更されました
.SessionEnded (ユーザーがログアウトしているか、セッションが終了しています)
.SessionSwitch (現在のユーザーを変更)
.TimeChanged 時間が変わりました
UserPreferenceChanged (ユーザー設定番号には変更が含まれます)

当社の ERP システムは、システム時刻が変更されたかどうかを監視します。時刻が ERP ライセンス ファイルの範囲外に調整された場合、ERP ソフトウェアは使用できなくなります。

7. Windows 7 の新機能を使用します

Windows 7 システムには、[ファイルを開く] ダイアログ ボックスなどのいくつかの新機能が導入されており、ステータス バーに現在のタスクの進行状況を表示できます。

りー

このメソッドを使用してダイアログ ボックスを開くには、BCL 独自のクラス ライブラリの OpenFileDialog よりも多くの機能があります。ただし、これは Windows 7 システムに限定されているため、このコードを呼び出すには、オペレーティング システムのバージョンが 6 より大きいことも確認し、Microsoft®.NET Framework のアセンブリ Windows API コード パックへの参照を追加する必要があります。ダウンロードするにはこのアドレスにアクセスしてください http://www.php.cn/

8. プログラムのメモリ消費量を確認します

次の方法を使用して、.NET によってプログラムに割り当てられたメモリの量を確認します

<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>

私のシステムでは、実行結果は次のようになります

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

現在のアプリケーションが占有しているメモリを確認するには、次の方法を使用します

[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);
Microsoft.WindowsAPICodePack.Dialogs.CommonOpenFileDialog ofd = new  Microsoft.WindowsAPICodePack.Dialogs.CommonOpenFileDialog();
ofd.AddToMostRecentlyUsedList = true;
ofd.IsFolderPicker = true;
ofd.AllowNonFileSystemItems = true;
ofd.ShowDialog();
rreerreeee

9. ストップウォッチを使用してプログラムの実行時間を確認します

一部のコードが非常に時間がかかるのではないかと心配な場合は、以下のコードに示すように、StopWatch を使用してこのコードにかかる時間を確認できます

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);

現在では、dotNetPerformance ソフトウェアなど、プログラムの実行時間を検出するための特別なツールがあり、それぞれの方法に合わせて調整できます。

上記のコードを例に挙げると、ソース コードを直接変更する必要がありますが、プログラムのテストに使用する場合は多少不便です。以下の例を参照してください。

りー

次のコードに示すように、構文を使用すると、コードの実行時間をチェックし、コンソールに出力できます。

りー

10. カーソルを使用します

プログラムがバックグラウンドで保存または削除操作を実行しているときは、カーソルのステータスをビジーに変更する必要があります。次のヒントを使用してください。

りー

使い方は以下の通りです

Before allocations: 651,064
After allocations: 40,690,080

プログラムが例外をスローする可能性があることを想定した書き方です。 コードにあるように、例外がスローされてもカーソルを前の状態に戻すことができます。

以上がC# プログラマーが頻繁に使用する 10 個の実用的なコード スニペットの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。