(轉)C#程序開發中經常遇到的10條實用的代碼

原文地址:http://www.cnblogs.com/JamesLi2015/p/3147986.html

?

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系統中,輸出以下信息:?

Platform: Win32NT

Service Pack:

Version: 6.1.7600.0

VersionString: Microsoft Windows NT 6.1.7600.0

CLR Version: 4.0.21006.1

?

2 讀取CPU數量,內存容量?

可以通過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;

}

?

請添加對程序集System.Management的引用,確保代碼可以正確編譯。

?

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

}

3 讀取注冊表鍵值對?

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

?? }

}?

請添加命名空間Microsoft.Win32,以確保上面的代碼可以編譯。

?

4 啟動,停止Windows服務?

這項API提供的實用功能常常用來管理應用程序中的服務,而不必到控制面板的管理服務中進行操作。?

ServiceController controller = new ServiceController(“e-M-POWER”);?????

controller.Start();?????

if (controller.CanPauseAndContinue)? ????

{?????

?? controller.Pause();?????

?? controller.Continue();?????

}?????

controller.Stop();

?

.net提供的API中,可以實現一句話安裝與卸載服務?

if (args[0] == "/i")

{

????? ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetExecutingAssembly().Location });

}

else if (args[0] == "/u")

{

? ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetExecutingAssembly().Location });

}?

如代碼所示,給應用程序傳入i或u參數,以表示是卸載或是安裝程序。

?

5 驗證程序是否有strong name (P/Invoke)?

比如在程序中,為了驗證程序集是否有簽名,可調用如下方法?

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

?

這個功能常用在軟件保護方法,可用來驗證簽名的組件。即使你的簽名被人去掉,或是所有程序集的簽名都被去除,只要程序中有這一項調用代碼,則可以停止程序運行。

?

6 響應系統配置項的變更?

比如我們鎖定系統后,如果QQ沒有退出,則它會顯示了忙碌狀態。

?

請添加命名空間Microsoft.Win32,然后對注冊下面的事件。?

. DisplaySettingsChanged (包含Changing) 顯示設置

. InstalledFontsChanged 字體變化

. PaletteChanged

. PowerModeChanged 電源狀態

. SessionEnded (用戶正在登出或是會話結束)

. SessionSwitch (變更當前用戶)

. TimeChanged 時間改變

. UserPreferenceChanged (用戶偏號 包含Changing)

?

我們的ERP系統,會監測系統時間是否改變,如果將時間調整后ERP許可文件之外的范圍,會導致ERP軟件不可用。

?

7 運用Windows7的新特性?

Windows7系統引入一些新特性,比如打開文件對話框,狀態欄可顯示當前任務的進度。?

Microsoft.WindowsAPICodePack.Dialogs.CommonOpenFileDialog ofd = new Microsoft.WindowsAPICodePack.Dialogs.CommonOpenFileDialog();

ofd.AddToMostRecentlyUsedList = true;

ofd.IsFolderPicker = true;

ofd.AllowNonFileSystemItems = true;

ofd.ShowDialog();

?

用這樣的方法打開對話框,與BCL自帶類庫中的OpenFileDialog功能更多一些。不過只限于Windows 7系統中,所以要調用這段代碼,還要檢查操作系統的版本要大于6,并且添加對程序集Windows API Code Pack for Microsoft?.NET Framework的引用,請到這個地址下載 http://code.msdn.microsoft.com/WindowsAPICodePack

?

8 檢查程序對內存的消耗?

用下面的方法,可以檢查.NET給程序分配的內存數量?

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

?

在我的系統中,它運行的結果如下所示?

Before allocations: 651,064

After allocations: 40,690,080

?

使用下面的方法,可以檢查當前應用程序占用的內存?

Process proc = Process.GetCurrentProcess();

Console.WriteLine(“Process Info: “+Environment.NewLine+

“Private Memory Size: {0:N0}”+Environment.NewLine +

“Virtual Memory Size: {1:N0}” + Environment.NewLine +

“Working Set Size: {2:N0}” + Environment.NewLine +

“Paged Memory Size: {3:N0}” + Environment.NewLine +

“Paged System Memory Size: {4:N0}” + Environment.NewLine +

?“Non-paged System Memory Size: {5:N0}” + Environment.NewLine,

proc.PrivateMemorySize64,?? proc.VirtualMemorySize64,? proc.WorkingSet64,? proc.PagedMemorySize64, proc.PagedSystemMemorySize64,? proc.NonpagedSystemMemorySize64 );

?

9 使用記秒表檢查程序運行時間?

如果你擔憂某些代碼非常耗費時間,可以用StopWatch來檢查這段代碼消耗的時間,如下面的代碼所示?

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

?

現在已經有專門的工具來檢測程序的運行時間,可以細化到每個方法,比如dotNetPerformance軟件。

?

以上面的代碼為例子,您需要直接修改源代碼,如果是用來測試程序,則有些不方便。請參考下面的例子。?

class AutoStopwatch : System.Diagnostics.Stopwatch, IDisposable

{

? public AutoStopwatch()

? {

????? Start();

? }

? public void Dispose()

? {

????? Stop();

????? Console.WriteLine(“Elapsed: {0}”, this.Elapsed);

? }

}

?

借助于using語法,像下面的代碼所示,可以檢查一段代碼的運行時間,并打印在控制臺上。?

using (new AutoStopwatch())

{

?? Decimal total2 = 0;

?? int limit2 = 1000000;

?? for (int i = 0; i < limit2; ++i)

?? {

????? total2 = total2 + (Decimal)Math.Sqrt(i);

?? }

}

?

10 使用光標?

當程序正在后臺運行保存或是冊除操作時,應當將光標狀態修改為忙碌。可使用下面的技巧。?

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;

}

}

?

用法如下所示,這個寫法,是為了預料到程序可能會拋出異常?

using (new AutoWaitCursor(this))

{

...

throw new Exception();

}

?

如代碼所示,即使拋出異常,光標也可以恢復到之間的狀態。

轉載于:https://www.cnblogs.com/tlduck/p/5202682.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373641.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373641.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373641.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ueditor的配置及使用

Ueditor官網&#xff1a;http://ueditor.baidu.com/website/ &#xff08;項目需要JSP版本&#xff1a;UTF-8版&#xff09; 1.配置 <script type"text/javascript" charset"utf-8">window.UEDITOR_HOME_URL "${ctx}/assets/plugins/uedi…

努比亞z17s刷原生安卓_電腦運行手機APP,不會沒關系,我推薦你使用顯卡服務器運行安卓模擬器...

很多人都想用電腦端運行手機APP&#xff0c;但是又不知道怎么操作。縱橫170yun小編推薦大家使用顯卡服務器&#xff0c;在顯卡服務器上運行安卓模擬器。讓你輕輕松松在電腦端運行手機APP&#xff0c;甚至還可以多開噢 。如果你的電腦沒有顯卡&#xff0c;也沒有關系&#xff0c…

Linux入門筆記——系統目錄結構

目錄 評論 / 根目錄&#xff0c;萬物起源。 /bin 包含系統啟動和運行所必須的二進制程序。 /boot 包含 Linux 內核&#xff0c;最初的 RAM 磁盤映像&#xff08;系統啟動時&#xff0c;由驅動程序所需&#xff09;&#xff0c;和 啟動加載程序。 有趣的文件&#xff1a; /boot/…

線程故事:關于健壯的線程池

我的主題系列的另一個博客。 這次是關于線程池&#xff0c;尤其是可靠的線程池設置。 在Java中&#xff0c;線程池由Java 5中引入的ThreadPoolExecutor類實現。該類的Javadoc組織得很好。 因此&#xff0c;我不遺余力地在此處進行概述。 基本上&#xff0c; ThreadPoolExecutor…

css縮寫

顏色&#xff1a; 16進制的色彩值為六位數&#xff0c;如果每兩位的值相同&#xff0c;可以縮寫一半。 如&#xff1a;#000000#000&#xff1b; #223344#234&#xff1b; 盒子的尺寸&#xff1a; 如margin:value; 一個值表示所有邊&#xff0c;兩個值表示上下&#xff0c;左右&…

win10改成ubundu主題_如何將ubuntu引導win10,修改為win10引導ubuntu

、首先用LiveCD進入ubuntu2、打開終端&#xff0c;輸入&#xff1a;fdisk -l 查看自己linux的分區情況&#xff0c;我的分了4個區&#xff0c;swap&#xff0c;boot&#xff0c;/&#xff0c;home&#xff0c;對應的分別是&#xff1a;/dev/sda9 swap/dev/sda10 boot/dev/sda11…

Linux入門筆記——文件操作命令1

pwd Print name of current working directory&#xff08;打印出當前工作目錄名&#xff09; cd Change directory&#xff08;更改目錄&#xff09;例子&#xff1a;cd 更改工作目錄到你的家目錄&#xff08;和cd ~命令的運行結果是等同的 &#xff09;cd - 更…

使用MJRefresh自定義下拉刷新,上拉加載動畫

有時候我們需要自己設置下拉刷新,上拉加載動畫的實現,這里主要是記錄下使用MJRefresh自定義下拉刷新,上拉加載動畫..... 下拉刷新我們只需要繼承MJRefreshGifHeader即可: 實現代碼如下: - (void)prepare{[super prepare];self.stateLabel.hidden NO;self.lastUpdatedTimeLabel…

2.mybatis入門實例 連接數據庫進行查詢

1.新建項目&#xff0c;添加mybatis和mysql的jar包 2.在mysql中新建表user[id,name,age] CREATE TABLE users (id int(11) NOT NULL auto_increment,NAME varchar(50) default NULL,age int(11) default NULL,PRIMARY KEY (id)) ENGINEInnoDB DEFAULT CHARSETutf8 3.新建User類…

使用JacpFX和JavaFX2構建富客戶端

創建快速且可擴展的桌面客戶端始終是一個挑戰&#xff0c;特別是在處理大量數據和長時間運行的任務時。 盡管Eclipse RCP和Netbeans RCP是已建立的平臺&#xff0c;但其想法是建立一個輕量級的框架來異步處理組件&#xff0c;類似于Web組件。 開發人員在線程主題上的工作應較少…

lob移表空間 oracle_Oracle數據庫(1)Oracle體系結構概述(一)

Oracle數據庫的體系結構主要包括&#xff1a;物理存儲結構、邏輯存儲結構、內存結構和實例進程結構。了解了Oracle的體系結構&#xff0c;就可以對Oracle數據庫有一個整體認識&#xff0c;這樣有利于后續Oracle的學習。下面我們分別來了解邏輯存儲結構、物理存儲結構、內存結構…

Linux入門筆記——文件操作命令2

cp Copy files and directories&#xff08;復制文件和目錄&#xff09; cp 選項&#xff1a; 選項 意義 -a, --archive 復制文件和目錄&#xff0c;以及它們的屬性&#xff0c;包括所有權和權限。 通常&#xff0c;復本具有用戶所操作文件的默認屬性。 -i, --interactive 在…

java 對象的上轉型對象(父類)

Example5_10.java class 類人猿 {void crySpeak(String s) {System.out.println(s); } } class People extends 類人猿 {void computer(int a,int b) { int ca*b;System.out.println(c); }void crySpeak(String s) {System.out.println("***"s"***"); }…

EnglishLeaning

今天看了些hadoop官方reference感覺自己詞匯量和語法真是又回到解放前了。于是&#xff0c;痛下決心要好好學習英語。找到了一些學習的方法&#xff0c;自己記錄下來&#xff0c;也和大家一起借鑒 努力目標&#xff1a; 掌握大量的計算機英語術語和縮略語&#xff1b;熟練掌握計…

雇用Java EE開發人員的一些面試問題

互聯網上充斥著Java開發人員的面試問題。 這些問題的主要問題是&#xff0c;它們僅證明候選人具有良好的記憶力&#xff0c;并且記住所有語法&#xff0c;結構&#xff0c;常量等。對他/她的邏輯推理沒有真正的評估。 我在下面列舉了一些面試問題的示例&#xff0c;這些示例根據…

手機mstsc遠程工具_遠程桌面連接,只需3步,輕松遠程操控電腦!

遠程桌面的好處遠程桌面有很多好處的1.對于運維技術人員來說&#xff0c;可以隨時隨地管理遠程主機&#xff0c;查看系統信息和硬件信息等系統性能診斷&#xff0c;遠程應用管理內存、CPU等敏感信息報警提醒&#xff0c;對遠程主機的一切盡收眼2.對于客戶服務來說&#xff0c;可…

Linux入門筆記——type、switch、help、man、apropos、whatis、info

type 顯示命令的類型switch 顯示可執行程序的位置help 得到shell 內部命令的幫助文檔例如&#xff1a;help cd--help 許多可執行程序支持一個 --help 選項&#xff0c;這個選項是顯示命令所支持的語法和選項說明。例如&#xff1a;mkdir --helpman 顯示程序手冊頁許多希望被命令…

linux上的常用的進程與內存優化命令

進程 ps命令 f 以樹狀結構顯示 u 顯示詳細信息 a 顯示所有進程 -A 顯示所有進程 -u 用戶名 是顯示該用戶下的進程 -l 更多進程詳細信息 例子1. 以樹狀結構顯示root用戶下進程的詳細信息 $ps fu -u root 顯示結果如下 USER PID %CPU %MEM VSZ RSS TTY STAT STAR…

qbytearry有數據上限嗎_金仕達大數據開發崗位面試題

金仕達-上海(1)自我介紹(2)在離線數倉&#xff0c;實時數倉中擔任的角色是什么&#xff0c;介紹項目&#xff1f;數據量有多大&#xff1f;(3)實時的指標和離線指標怎么消除掉&#xff1f;有沒有必要一致&#xff1f;(4)Flink上有多少個指標&#xff0c;一個指標一個jar包嗎&am…

BZOJ 1012 單調隊列+二分

思路&#xff1a; 維護一個單減的序列 序號是單增的 每回二分查找第一個比詢問的大的值 我手懶 用得lower_bound //By SiriusRen #include <cstdio> #include <algorithm> using namespace std; #define int long long int m,mod,top,jy,ans,tot; char ch[3]; st…