全面解析CLR是什么一點通
CLR是什么,有些人對這個概念不是很深入的理解,要在代碼中熟練的運用CLR,我們就要深入的了解CLR底層的架構,為了更好的理解應用程序在IIS中的運行機制,在網上搜集了一些關于CLR是什么的基礎知識,希望對大家有幫助。
CLR(公用語言運行時)和Java虛擬機一樣也是一個運行時環境,它負責資源管理(內存分配和垃圾收集),并保證應用和底層操作系統之間必要的分離。.NET提供了一個運行時環境,叫做公用語言運行時(Commen Language Runtime),是一種多語言執行環境,支持眾多的數據類型和語言特性。他管理著代碼的執行,并使開發過程變得更加簡單。這是一種可操控的執行環境,其功能通過編譯器與其他工具共同展現。依靠一種以運行時為目標的編譯器開發的代碼叫做可操控代碼managed code。與之相對的是unmanaged code。
元數據metadata:為了使運行時環境可以向可操控代碼提供服務,語言編譯器需要產生一種元數據,它將提供在使用語言中的類型、成員、引用的信息。運行時環境使用元數據定位并載入類,在內存中展開對象實例,解決方法調用,產生本地代碼,強制執行安全性,并建立運行時環境的邊界。
可操控執行的含義:對象在執行的過程中完全被運行時環境所控制。運行時環境提供以下服務:自動內存管理、調試支持、增強的安全性及與非可操控性代碼的互操作性。條件:
1、選擇以運行時為目標的語言編譯器,如VB、C#;
2、在組件的輸出類型中使用CLR要求的語言特性。
CLR用什么提高了平臺的可靠性?以及為了達到面向事務的電子商務應用所要求的穩定性級別,CLR還要負責其他一些任務,比如監視程序的運行。按照.NET的說法,在CLR監視之下運行的程序屬于“受管理的”(managed)代碼,而不在CLR之下、直接在裸機上運行的應用或者組件屬于“非受管理的”(unmanaged)的代碼。CLR將監視形形色色的常見編程錯誤,許多年來這些錯誤一直是軟件故障的主要根源,其中包括:訪問數組元素越界,訪問未分配的內存空間,由于數據體積過大而導致的內存溢出,等等。
然而,這種對受管理代碼的運行監視是有代價的。雖然當前還不可能精確地得到監視程序運行所需要的開銷,但從當前Beta測試版的性能表現來看,正如Microsoft所承認的那樣,我們可以預料由它導致的性能降低程度至少達到10%。當然,如果監視程序運行能夠將穩定性和可用性提高到一個新的檔次,我們可以懷疑10%的性能降低是否還可以稱為一件壞事……
為什么微軟要集成clr 到sql server?

在我看來,CLR是什么?clr是 存儲過程非常好的東西,它彌補了t-sql 做為一門查詢語言的不足,使得數據庫在處理邏輯問題的時候不像以前那么蹩腳,許多DB程序員為了用 t-sql實現一個簡單的過程邏輯而大傷腦筋,比如一個非常間的需求,我想傳遞一個數組,里面裝有id,想更新這些id的行的狀態,就是在傳遞一個數組到存儲過程中并分割成若干個id,一個在C#中非常簡單的實現卻要為t-sql絞盡腦汁。。。。相信大多數程序員都有我類似的苦惱。而在最近的項目中,涉及到由聯通過來的短信數據處理,預處理短信表是由另外一個模塊插入的,我負責的模塊需要對這個預處理短信表的記錄讀取出來,定時掃描整個表,如果有需要處理的短信,那么要由windows服務定時讀取出來,并且根據短信種類的不同做業務邏輯的分發,整個模塊的性能要求非常高,所有的上行短信都要經過這個表,并處理。每秒發生的開連接插入刪除造作非常多。最開始的設計是使用windows服務定時掃表并更新回數據庫,一條一條的更新回數據庫。。。。其性能之差是難以想象的。所以準備采取clr存儲過程結合job,把業務邏輯的分發也拿到數據庫clr環境下做,節省往返開銷和連接開銷。
總之,t-sql 是一門面向查詢的語言,以數據為主,但是對過程的處理支持卻非常差勁,clr 集成就能非常好的彌補了這點。之所以寫個開篇,是看到有些人還是對這種技術的應用環境的不了解。好了,接下來,我準備寫一些關于clr 集成的 sql server 2005 下的應用,包括clr proc clr function 等。歡迎大家指正!
附上使用context connection 和使用一般數據庫連接的對比圖,大家可以參考一下。
【編輯推薦】

















