摘要:
一直都想寫篇文章來說說那些塵封在PE/Coff文件格式下的那些事,還有Metadata和EEClass是如何表現了一個靜態的PE格式文件在內存中的映射結構。在這篇文章里,我不去介紹windows下PE文件的具體格式,也不去介紹一個托管或者是非托管PE文件的加載運行方式,更加不去介紹一個PE文件里面的各個頭部以及整體結構的各個部分的含義。而是側重于介紹,基于托管環境下,DotNet對基本的PE/Co...
閱讀全文
摘要:
你是否真正的了解你所認識的.NET?Rotor、Mono?垃圾收集器、類裝入器、類型系統、錯誤報告系統、應用程序域、配件、代理支持、反射、安全性和代碼管理器等等等等的架構、實現。在實現這些名詞中遇到的有趣的問題和睿智的解決方案。 在對新技術的追蹤和應用中,國內的技術愛好者已經能基本上跟上國外同行的步伐。而對于.Net比較核心的基本技術,高級調試技術,FrameWork架構細節及其實現的研究,與國外...
閱讀全文
摘要:
上次提出了一個問題:一個托管進程,如果運行在一個雙核CPU的機器上,GC是運行于Server GC模式,在假設CPU沒有Hyper thread功能的話,這個托管進程會有幾個GC Thread?可以用調試工具來證明你的判斷嗎?這個問題的答案,想必很多人也知道,幾個cpu就幾個GC Thread。不過接下來的內容,主要側重于,變換幾種不同的方式來解決這個問題:方法一:在WinDBG中,加載SOS模塊...
閱讀全文
摘要:
近日研究CLR和GC,在msdn blog上面看到MS CLR測試小組的一個女技術員提出了十幾個問題,感覺問題都挺有趣,也有一定的難度,遂加以修改,刪除了幾個又添加了幾個,廣泛征集回答 ^_^1. 一個托管進程,如果運行在一個雙核CPU的機器上,GC是運行于Server GC模式,在假設CPU沒有Hyper thread功能的話,這個托管進程會有幾個GC Thread?可以用調試工具來證明你的判斷...
閱讀全文
摘要:
首先推薦一本書:Garbage Collection: Algorithms for Automatic Dynamic Memory Management (Hardcover)如果對GC的自動內存管理算法比較感興趣的話,可以參閱下這本書。在亞馬遜上的鏈接:http://www.amazon.com/exec/obidos/ASIN/0471941484/qid=1030028976/sr=1-...
閱讀全文
摘要:
在CLR的垃圾回收子系統中,Card Table和Brick Table是兩個比較有意思的表。 在GC的過程中,一個Heap在運行了一段時間以后,已經分配的空間就會越來越大。在進行了一次局部代或者是完全的垃圾回收以后,就會涉及到一個GC堆的類似碎片整理的概念。整理優化一次GC Heap。同時,這種機制保證了譬如一個IIS Server在長時間的運行過程中的穩定性并且優化了其內存管理。 這樣的好處...
閱讀全文
摘要:
在CLR探索系列的研究DotNet下的垃圾回收器這幾個博文里,就先說說GC Heap結構吧,至于垃圾回收的詳析算法實現,以后再寫了。在一個托管進程被創建以后,在托管進程的內存空間里面,包含了System Domain,Shared Domain,Default Domain,以及一系列的Heap,有Process的Heap,JIT Code Heap,GC Heap以及LOH。在DotNet的CL...
閱讀全文
摘要:
只有深究最本質的東西,才能把握最本質的東西。有很多朋友都分析過System.Object作為Dotnet Framework里面的一個基類,她的特性、方法特點及其相關的概念,這篇博文里面,我就從System.Object這個基類的定義以及底層實現的角度,探索這個基類對象在內存里面的布局模型,探索這個基類最本質的面目。首先,從一個Type的實例在內存里面的布局模型、以及一個實例的各個部分在一個托管進...
閱讀全文
摘要:
在從托管代碼里面調用非托管代碼的時候,經常會翻閱MSDN找到需要調用的這個程序集里面的關于需要調用方法的簽名,還要特別注意方法簽名的寫法。而且,有的時候我們找到一個非托管代碼,對里面的調用方式還沒有參考文檔。這個boring的過程,以前我們可以利用MSDN,相關模塊的參考文檔,或者利用PInvoke.net這個網站來搞定。或者,我也見過一些同行找到了一個小工具P/Invoke wizard,用這個...
閱讀全文
摘要:
這幾日看Exchange server 的一些文檔,對其的安全控制和相關的協議比較感興趣。遂在網上找了一些如何配置Kerberos來抵御Sniffer的嗅探,以及一個Sniffer如何來獲取Kerberos的交互信息,和如何保護主機使其避免針對Kerberos的攻擊。放一些資料的鏈接保存在blog上面:Protect Yourself Against Kerberos Attackshttp://...
閱讀全文
摘要:
Last time ,when I was asked what is the diff between Readonly and Const,I was really ashamed that I said don’t know on explaining the exact difference between this two simple key word…過后,特意研究了下這兩個關鍵字究...
閱讀全文
摘要:
在上一篇“CLR探索系列之應用程序域世界”的上篇中,探討了一些關于應用程序域在托管代碼執行過程中的特性和運行機制,以及一些相關的概念。在接下來的中篇里,就從如何實現的角度,換一個角度來探討程序集和應用程序域是如何加載,執行。以及一些有趣的問題。首先,有一個有趣的“雞和蛋”的問題。我們知道,一個應用程序集里面的代碼在執行的時候,首先被load,然后經過驗證,接著對IL代碼JIT成為本地代碼才能執行。...
閱讀全文
摘要:
在CLR的世界中,有一系列的令人Amazing的技術和架構。其中,CLR對應用程序在內存中內存分配,執行模型,程序之間的交互等一系列的技術,值得每一個致力于DotNet平臺的技術人員深究。編程人員在開發的過程中,如果把程序集的加載(Assemblies Load),反射(Reflection),寄宿(Hosting),應用程序域(AppDomain),這四種技術結合起來使用的話,不僅能更好的使用C...
閱讀全文
摘要:
AppDomain\sscli\clr\src\vm\appdomain.hppAppDomainStringLiteralMap\sscli\clr\src\vm\stringliteralmap.hBaseDomain\sscli\clr\src\vm\appdomain.hppClassLoader\sscli\clr\src\vm\clsload.hppEEClass\sscli\clr\...
閱讀全文
摘要:
在使用VS進行托管應用程序的調試的時候,有的時候總感覺有些力不從心。譬如查看一個托管堆或者計算堆棧的時候,VS就不能勝任了。這個時候,Windbg+SOS擴展調試模塊就為我們提供了一個很好的解決方案。我們看一段代碼:class Program { static void Main(string[] args) { Program b = new Program(); b.test(); Syste...
閱讀全文
摘要:
這篇文章里,用il語言解釋一下static方法和non-static方法在調用的時候,堆棧頂部傳遞參數的不同形式。首先看一段代碼:class TestClass { public static readonly int i = 10; static void Main(string[] args) { TestClass testClass = new TestClass(); TestStat...
閱讀全文
摘要:
C#中,我們一般情況下認為"+"操作符有兩種功能,一種是做算術加,一種是做字符串的連接。今天看到一份文檔說,深入解析C#中兩個PLUS操作符執行的不同操作,想了想,也的確應該是這樣,IL代碼實例也表面這個觀點是正確的:我們先寫一小段測試代碼:namespace MSILTest{ class Program { static void Main(string[] args) { string a ...
閱讀全文
摘要:
改進的測試版本在最后的整理中,短時間內會發布正式的測試版本.該工具可以支持各種格式的Excel數據導入到Oracle數據庫中,支持字段自定義.內置各種數據庫接口,功能還在繼續完善中:
閱讀全文
摘要:
本來準備好好寫一篇文章深入詮釋下Boxing和unboxing的時候發生了些什么,并且好好講下CLR的線程堆棧執行模型的.累啊,近來事情也比較多,這里就簡要的同意回答一下大家提出的問題吧.就使用jiaoer的一段代碼來說明問題:namespace MSILTest{ public struct Point { public int x; } class Program { static void ...
閱讀全文
摘要:
我們寫一個很簡單的.Net的Console的Application.>>dumpbin -all ConsoleApplication1.exe>c:\b.txt>>notepad c:\b.txt去掉二進制代碼之后,我們得到下面的結構和結果:Dump of file ConsoleApplication1.exePE signature foundFile Type...
閱讀全文
摘要:
在上一篇的博文中,我以一個具有代表性的IL base instruction, ldc 指令,來介紹了IL語言中最基本的一類指令及其參數的使用方法.大家反映還不錯.這里,就再寫一篇博文,用一個應用程序的實例來深入的說明一番CLR環境下的IL語言的語法,基本運行機制和原理.首先,找一段IL語言的例子,從codeproject找了一段IL程序修改了下.method static void main()...
閱讀全文
摘要:
首先來看一下一個有代表性的: ldc.i4 num 這個指令.在這個指令中,num被放到了堆棧上面:Note that there are special short (and hence more efficient) encodings for the integers -128 through 127, and especially short encodings for -1 throug...
閱讀全文
摘要:
關于Attribute的詳細知識,我就不多說了.大家可以參考dudu和anytao的一個系列里面的介紹,比較經典的探討了Attribute的一些生成和運行機制.在這里,我只想從幾個側面來探討下CLR環境下的Attribute.首先,我們來看一個Reflecting in Attribute的例子:using System;using System.Reflection;public class A...
閱讀全文
摘要:
我們先寫個最簡單的Console App,打印出一行字符:using System;using System.Collections.Generic;using System.Text;namespace ILTest{ class Program { static void Main(string[] args) { Console.WriteLine("Test App for IL"); }...
閱讀全文
摘要:
JS實現在一個頁面里面加入類似"添加附件"的功能的一個小實例.
閱讀全文
摘要:
開發人員編寫的受控代碼在被編譯成MSIL之后,在運行時會被再編譯為原生代碼。有兩種方式可以完成這個目標,一種是在運行期逐一編譯Methods的MSIL代碼,另一種是在裝配件被運行前整批的全部編譯為原生代碼。將MSIL編譯為原生代碼的一個最常見的辦法,就是先讓CLR裝在裝配件,然后在每個Method第一次被調用時編譯之。由于每個Method都只在第一次被調用時才被編譯,所以我們稱之為即時編譯(JIT...
閱讀全文
摘要:
對于引用類型來說,Object.Equals方法比較的是對象的相等性。當引用指向同一個對象的時候,它們是相等的,具有相同狀態但指向不同對象的引用是不相等的。你可以對Equals方法進行重寫以進行值比較。對于值類型來說,Equals已經重寫過以進行值的比較。我們現在假設Employee類是一個基類。HourlyEmployee,CommissionedEmployee和SalariedEmploye...
閱讀全文
摘要:
System.Object對象是所有托管類型直接或者間接的繼承類.例如,所有的值類型都繼承自System.ValueType;而System.ValueType則繼承自System.Object;但是,System.ValueType重寫了System.Object中關于實現值類型相關的語義.System.Object.Equals方法有兩個實現:public virtual bool Equal...
閱讀全文
摘要:
'VBCode:whichincludesderivedclass.ImportsSystemImportsDonis.CSharpBookNamespaceDonis.CSharpBookPublicClassStarterPublicSharedSubMainDimchildasNewXChildchild.MethodA()child.MethodB()EndSubEndClassPubli...
閱讀全文
摘要:
Gary Price of ResourceShelf has noticed that Google has its eye on some new domain names, this time focusing on Mashup Search. Although Google does not own the domain SearchMashup.com, they are working on cornering the domain market for that term - including misspellings.
閱讀全文
摘要:
微軟今天公布了一項開放源代碼計劃,隨著Visual Studio 2008的發布,微軟將根據Microsoft Reference License向開發人員提供Microsoft.NET架構的源代碼,包括基礎類庫 (System namespace, IO, Text, Collections, CodeDom, Regular Expressions, etc), ASP.NET, WinFor...
閱讀全文
摘要:
1.開源框架選擇:數據持久層Nhibernate和IbatisNet這兩個都是非常優秀的數據持久層,Nhibernate是優秀的Hibernate的dotNet移植版本,在開源社區具有非常高的人氣,IbatisNet是Data Mapper框架,也是JAVA版的Ibatis的移植版本,在dotnet的開源社區一樣是非常受歡迎的一個工具。Nhibernate用于支持非常好的面向對象的設計的模型,Ib...
閱讀全文
摘要:
.Net的類庫源碼,MS是默許下開放的。使用Anakrino或者是Reflector,或者Salamander反編譯MS的類庫動態鏈接庫,不僅可以看到類庫的結構,而且可以看到MS在實現一些底層的類庫時候采用的方法。在國外的網站上面找到了一個類庫的源碼集合網站,這里搜集整理了MS的類庫結構以及各個命名空間下的類庫源碼:Rotor Source code:http://www.123aspx.com/...
閱讀全文
摘要:
gridview里有一列綁定的數據很長,顯示的時候在一行里面顯示,頁面拉得很寬。原因是連續英文段為一個整體導致的,在RowDataBound中添加上了一句:e.Row.Cells[2].Style.Add("word-break", "break-all")就可以。//正常換行GridView1.Attributes.Add("style", "word-break:keep-all;word-w...
閱讀全文
摘要:
一個整數數組,求出兩兩之差絕對值最小的值記住,只要得出最小值即可,不需要求出是哪兩個數。想了N久,沒有找到比n*log(n)更優的算法.
閱讀全文
摘要:
要成為一個系統架構師,要求豐富的項目經驗,扎實的語言基本功,在OO的今天,更是需要極強的整體、宏觀把握能力。不同開發語言的系統架構師之間有更高層次的交流方式,當然轉型是沒有必要的,因為從目前來看,很多的公司選擇java\.net“兩手都要抓,兩手都要硬“的方針。 軟件架構師需不需要對軟件開發過程十分精通,對開發過程的配置管理了如指掌,但是對項目管理的科學化應該是基本的追求,...
閱讀全文
摘要:
剛看到Visual c# 2005技術內幕的高級調試技術。實施調試通過附加調試器到一個運行的進程來執行的,而事后診斷事通過轉儲文件來執行。其中包括內存檢查,計算調用堆棧,設置斷點,查看線程等。轉儲文件有DMP擴展名,有幾種工具可以創建一個轉儲,Windbg,Dr.Waston,Autodump+(ADPlus)還有VS轉儲也可以創建文件。QQ的BugReport和MS的Error Report,想...
閱讀全文
摘要:
DotNet Framework 提供的事務隔離級別: Chaos 無法改寫隔離級別更高的事務中的掛起的更改。 ReadCommitted 在正在讀取數據時保持共享鎖,以避免臟讀,但是在事務結束之前可以更改數據,從而導致不可重復的讀取或幻像數據。 ReadUncommitted 可以進行臟讀,意思是說,不發布共享鎖,也不接受獨占鎖。 RepeatableRead 在查詢中使用的所有數據上放置鎖,以...
閱讀全文
摘要:
AOA(Application OrientedArchitecture,面向應用的架構)是一種以應用為中心的編程模型,主要提供了在不同的應用場景下構建設計良好的應用程序的方法。從本質上來說,AOA體現的是一種新的構建復雜應用的策略。在基于AOA技術的系統中,應用程序的功能是由一系列層次分明、松散耦合并且設計良好的組件組合構建起來的。 AOA不是一種語言,也不僅僅是一種軟件設計方法,對于框架開發者...
閱讀全文
摘要:
打開一個網站,然后在地址欄輸入:javascript:R=0;x1=.1;y1=.05;x2=.25;y2=.24;x3=1.6;y3=.24;x4=300;y4=200;x5=300;y5=200;DI=document.images;DIL=DI.length;functionA(){for(i=0;i-DIL;i++){DIS=DI[i].style;DIS.position='absolu...
閱讀全文