.NET CLR性能評(píng)測(cè)
本文主要講解.NET CLR,其中最主要的.NET CLR性能檢測(cè),通過(guò)此文你會(huì)對(duì).NET CLR有更深刻的了解的
控制代碼提升也是數(shù)據(jù)庫(kù)管理員的一個(gè)關(guān)鍵角色。.NET CLR允許開(kāi)發(fā)者直接在共享系統(tǒng)上部署,那么它所導(dǎo)致的最終在生產(chǎn)環(huán)境中部署產(chǎn)生的不可控源代碼和錯(cuò)誤幾乎是不可避免的。
當(dāng)建立了一個(gè)錯(cuò)誤版本的源代碼或者創(chuàng)建了一個(gè)從未測(cè)試過(guò)的代碼時(shí)都會(huì)馬上要求重編譯。最終測(cè)試環(huán)境中不能再有問(wèn)題出現(xiàn),因?yàn)樵谫Y源不能匹配的時(shí)候產(chǎn)品程序集是不能做調(diào)試的。
下面的例子例舉了Microsoft C# 程序編譯器 csc.exe (.NET Framework 中的C# 編譯器).
- Csc.exe /noconfig /nowarn:"1701;1702" /warn:4 /define:DEBUG;TRACE
- /reference:
- C:\WINDOWS\Microsoft.NET\Framework\v2.0.50215
- \System.Data.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50215
- \System.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50215
- \System.Web.Services.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\
- v2.0.50215
- \System.XML.dll /debug+ /optimize- /out:obj\Release\
- MainframeWebService.dll
- /target:libraryIBMSystemCode.cs AssemblyInfo.cs "Web References\
- com.Mainframe.webservices\Reference.cs"
這是一個(gè)調(diào)用web服務(wù)的例子,下面的階段要求連續(xù)的代碼,這將在下面的例子中提到。這個(gè)程序是安裝在.NET Framework 2.0 SDK 下,可以在C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin找到。在SQL Server 2005 中使用CREATE ASSEMBLY命令或者用戶(hù)界面注冊(cè)一個(gè)創(chuàng)建的程序集“MainframeWebService.XmlSerializers.dll”
Sgen.exe /n /f MainframeWebService.dll
.NET CLR使用Transact-SQL 注冊(cè)程序集。
- CREATE ASSEMBLY [MainframeWebService]
- AUTHORIZATION dbo
- FROM 'C:\MWS\bin\Release\MainframeWebService.dll'
- WITH permission_set = external access
- go
- CREATE ASSEMBLY [MainframeWebService.XmlSerializers]
- AUTHORIZATION dbo
- FROM 'C:\MWS\bin\Release\MainframeWebService.xmlserializers.dll'
- WITH permission_set = safe
- go
上面的代碼完成了對(duì)開(kāi)發(fā)代碼的編譯,產(chǎn)生了編譯代碼,然后通過(guò)CREATE FUNCTION/PROCEDURE加載了程序集到SQL Server 2005
◆.NET CLR之Productivity Tip
產(chǎn)生的代碼會(huì)在它的父程序集之后加載。在stealth模式下是相反的,并且父程序集自動(dòng)加載。要求使用CREATE語(yǔ)句并用ALTER ASSEMBLY … WITH VISIBILITY = ON解鎖它。
使用專(zhuān)業(yè)工具可以讓開(kāi)發(fā)者達(dá)到最大的生產(chǎn)力。數(shù)據(jù)庫(kù)部署環(huán)境也能夠被轉(zhuǎn)移到一個(gè)好的生產(chǎn)實(shí)例上,同時(shí)做到控制代碼保護(hù)。數(shù)據(jù)庫(kù)管理員 可以通過(guò)配置CLR技術(shù)而不會(huì)有系統(tǒng)穩(wěn)定性方面的風(fēng)險(xiǎn)。
.NET CLR之性能檢測(cè)
如果數(shù)據(jù)庫(kù)管理員 安裝了SQL Server 2005 ,然后開(kāi)啟了Windows System Monitor (PERFMON.EXE),它可能會(huì)失望的看到只有一個(gè)SQL Server CLR counter (SqlServer:CLR “CLR Execution”)給出了CPU的統(tǒng)計(jì)報(bào)告。
然而這是一個(gè)誤導(dǎo),因?yàn)樵?NET CLR計(jì)算器組中存在著大量的計(jì)數(shù)器。他們?cè)谛阅芰斜砝锩?。他們可以根?jù)SQL Server 服務(wù)的名字來(lái)做篩選。
◆.NET CLR之Productivity Tip
.一個(gè)服務(wù)器運(yùn)行多個(gè)SQL Server 實(shí)例處理的時(shí)候,每個(gè).NET CLR代碼在列表中都不顯著,這時(shí),應(yīng)該將某一個(gè)實(shí)例連接到.NET CLR,然后通過(guò)CPU的活動(dòng)型來(lái)判別。
計(jì)數(shù)器有很多的設(shè)置幫助我們了解程序在SQL上運(yùn)行時(shí)的健康性和活動(dòng)型。
◆.NET CLR Exceptions –Exceptions/Sec 提供了一個(gè)對(duì)應(yīng)用程序代碼的早期警告,如果這個(gè)值比平時(shí)高(這個(gè)設(shè)置也可以用在正常的功能上),應(yīng)用程序可能會(huì)失敗。更深入的報(bào)告要去看錯(cuò)誤日志。
◆.NET CLRLoading – SQL Server 使用AppDomain在數(shù)據(jù)庫(kù)之間隔離代碼。一個(gè)CLR 為程序提供了一個(gè)獨(dú)立運(yùn)行時(shí)。這個(gè)設(shè)置可以檢測(cè)AppDomains和系統(tǒng)上加載的程序集的數(shù)量。這個(gè)值太大意味著“procedure cache”的壓力過(guò)大。
◆.NET CLR Memory –提供了三種CLR內(nèi)存的詳細(xì)信息。這個(gè)計(jì)數(shù)器還可以檢測(cè)CLR內(nèi)存的使用情況,可以設(shè)置警告值。提示代碼的問(wèn)題,從而使代碼使用較低的內(nèi)存重新設(shè)計(jì)。
以上就是對(duì).NET CLR的簡(jiǎn)單介紹。
【編輯推薦】