CLR via C# 讀書筆記 2-3 Cache Lines and False Sharing(高速緩衝區和錯誤共用???)

因為水平有限 不知道怎麼用中文表達Cache Lines 和 False Sharing (暫時把他們翻譯為 高速緩衝區和錯誤共用,如有謬誤,還請有識之士指正) 現在的cpu 一般擁有多個核心和一個cpu內的緩衝(一般是L2?)這些緩衝一般位於cpu晶片內, 他的速度遠遠高於主板上的記憶體,一般來說cpu會把資料從記憶體載入到緩衝中 ,這樣可以獲得更好的效能(特別是頻繁使用的資料)這個快取預設劃分64 Byte為一個地區(這個數字可能在不同的平台上不一樣, 可以通過 win32 api 函數

(面向c#開發人員) 編寫javascript的好習慣六 for 運算式

在javascript裡面也支援 for...in  和for (i=0;i<length;i++)這兩種文法不過與C#有所不同,例如 如下所示的for...invar myArray=[];myArray[5]="test";console.log(myArray.length); // 6for(name in myArray){ console.log(name, myArray[name]);}//outputs// 5test數組的length

C#動態產生代碼和程式集

以下代碼動態產生cs檔案編譯為Assembly  之後可以使用AppDomain.Load 載入程式集,並建立類型 public static void Test() {//聲明代碼的部分 CodeCompileUnit compunit = new CodeCompileUnit(); CodeNamespace sample = new CodeNamespace("命名空間");

CLR via C# 讀書筆記 2-1 編譯器最佳化導致的問題

DotNet項目在Debug 和Release 模式一個主要的差別就是有沒有開啟編譯器最佳化在release下由於採用了編輯器最佳化,那麼原來有些運行正常的代碼就會出問題下面一段代碼就是這樣 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->internal static class StrangeBehavior{// As you'll see

C# 使用lock關鍵字lock不同的對象

c# lock關鍵字的本質是調用Monitor.Enter(object obj)並且在finally的時候調用Monitor.Exit(obj) 在obj是不同資料類型的時候會出現不同的情況1.鎖定類型 例如lock(typeof(int))  lock(typeof(ClassA))   // CalssA 是一個類的定義  備忘:前者作用範圍跨AppDomain 不跨Process, 後者不跨AppDomain(預設設定)  使用範圍:絕不推薦使用2.鎖定字串 例如lock("abc")

CLR via C# 讀書筆記 3-1 一種單一實例應用程式的實現(訊號量)

單一實例應用程式指的是在你的作業系統中你只能開一個的程式例如說outlook以下代碼通過 Semaphore 實行了一個單一實例的控制(事實上你使用EventWaitHandle 或者 Mutex都是可以的)原理是因為windows不允許重名的核心對象 ,例子中是

CLR via C# 讀書筆記 3-2 AutoResetEvent ManualResetEvent 和Semaphore

這三個對象都經常用於線程同步下面是一些他們的異同點 1.當多個線程在等待一個 AutoResetEvent的時候,每次調用AutoResetEvent.Set()方法只會喚醒一個線程2.當多個線程在等待一個ManualResetEvent的時候,每次調用ManualResetEvent.Set()方法會喚醒所有等待的線程3.當多個線程在等待一個Semaphore的時候,每次調用Semaphore.Release(Int releaseCount)的時候 將喚醒releaseCount個線程

CLR via C# 讀書筆記 3-4 鎖-條件變數模式

條件變數模式(The Condition variable Pattern)指的是一個任務在等待一個變數的狀態.(例如一個線程當變數為true的時候執行,否則就一直在休眠狀態) 以下代碼示範了Thread1 一直在等待m_condition的狀態Thread1在等待狀態改變的過程中,間歇性的暫時釋放鎖的控制權這樣Thread2就有機會獲得到鎖,改變m_condition的狀態,並且執行Pulse(All)方法,

(面向c#開發人員) 編寫javascript的好習慣三 字串預設值初始化

經常遇到情境  需要檢查 一個字串是不是null 如果是就設定預設值在C#中可以用下面3個方法初始化 string someString = null;if (someString == null) { someString = "default value"; } someString = (someString == null) ? someString :

C#的實值型別記憶體配置總是和上下文有關,而不總是在堆棧上

總是很常見到一些說法是實值型別總是分配在堆棧上,參考型別總是分配在堆上(google搜尋大約10萬條記錄- -)最近仔細思考了一下發現有點問題....當然我個人水平有限, 有什麼差錯還請大家指正個人總結的c#實值型別和應用類型的分配應該是:  應用類型肯定在託管堆上,實值型別總是和上下文有關 1.類的執行個體成員, 類是參考型別,總是分配在堆上,那麼a的記憶體就在ClassA的執行個體的記憶體裡,也必然在堆上Code highlighting produced by Actipro

CLR via C# 讀書筆記 4-2 線程和鎖的一些使用原則

1.如果可以,儘可能使用線程池中的線程, 因為自己建立,維護銷毀一個線程會極大的消耗CPU和記憶體資源,如果需要定時工作,那麼請使用System.Threading.Timer2.在讀多寫少的情況,使用讀寫鎖ReaderWriterLockSlim (不要使用ReaderWriterLock), 因為這樣讀操作之間不會互斥3.盡量不要使用遞迴的鎖 ,當然Moniter是個例外,他雖然使用了遞迴, 但是他的效能也挺好的,(lock關鍵字內部就是使用Moniter,

CLR via C# 讀書筆記 2-2 編譯器最佳化導致的問題 – Timer

DotNet項目在Debug 和Release 模式一個主要的差別就是有沒有開啟編譯器最佳化在Release下由於採用了編輯器最佳化,那麼原來有些運行正常的代碼就會出問題 下列代碼, 系統覺得Timer已經沒有用了...所以就被回收了..所以在Release模式下 timer只會執行一次 (注意如果是Debug模式那麼一直運行)(注意如果使用Visual Studio的調試器, vs會幫你延長臨時變數的生命週期...那麼也會一直運行)(調用GC.Collect()是為了顯式執行GC

CLR via C# 讀書筆記 3-6 比較APM和EAP(非同步編程模型和基於事件的編程模式)

APM: The Asynchronous Programming Model  (非同步編程模型)    BeginXXXEAP: The Event-Base Asynchronous Pattern (基於事件的編程模式)  Button.Click+=........EPM: The Event-Base Programming Model  1.本質上EAP內部也是使用了APM,只是EAP做了一些封裝,

CLR via C# 讀書筆記 6-3 跨域訪問的效能問題

以下代碼示範了跨域訪問的效能問題大約不跨域比跨域快100多倍.... 代碼Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> AppDomain newDomain = AppDomain.CreateDomain("remote application domain", null, null);

CLR via C# 讀書筆記 5-1 何時對託管資源使用Finalize

Finalize方法常用於回收非託管資源,以防止資源流失在較少的情況下它也會被用於託管資源1.建構函式中如果拋出異常, 那麼只有Finalize方法才會被執行,在這裡可以回收一些已經分配的資源(Dispose不會被執行!!!)當然:Finalize方法的執行時間還是下一次GC的時候(依然不確定時間)如果不實現該方法將會造成資源流失以下代碼示範了在這種情況代碼Code highlighting produced by Actipro CodeHighlighter (freeware)http:/

CLR via C# 讀書筆記 5-6 記憶體回收的Generation

直接用代碼和注釋說明問題吧~~ 代碼Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->public static class Program{internal sealed class GenObj {~GenObj() { Console.WriteLine("In Finalize method");

CLR via C# 讀書筆記 6-4 監控AppDomain資源使用

可以通過將AppDomain.MonitoringIsEnabled 設定為true開啟監控域的資源之後可以通過訪問以下屬性擷取域的資源消耗  1. MonitoringSurvivedMemorySize      2. MonitoringSurvivedProcessMemorySize      3. MonitoringTotalAllocatedMemorySize       4. MonitoringTotalProcessorTime不過這裡有些非常噁心的地方  1.

Katama hash 演算法的C#實現

Katama hash 是經常在分布式解決方案中見到的演算法,網上已經有很多文章介紹這個演算法或者其他的hash一致性演算法前一陣子正好在做一個分布式系統的時候需要實現該演算法,在網上找了找,發現用C#實現的都不是很好。。有一個搜尋出來結果最前面最多的實現,效能沒有最佳化過,代碼可讀性也不是很好。。然後各個C#的memcached library中的實現又耦合的太緊了,所以自己搞了下面的這段代碼(參考了這位朋友的實現 http://www.cnblogs.com/daizhj/archive/2

Lock Free ObjectPool的C#實現 (對象池)

最近實現了一個LockFree的對象池主要的想法是:  1.複用構造出來的對象  2.避免重複建立和銷毀對象對GC造成的壓力  3.避免重複建立對象造成的資源消耗最適合的情境是:  1.構造對象很慢,並且需要構造很多個對象的情況主要技術特徵:  1. C#4.0的實現(可以降級到2.0)  2. 內部沒有使用普通的lock,而是使用Lock Free的實現方式  3. 將常用的取回對象的方式,換成委託運行, 這樣的話ObjectPool可以幫你自動將對象壓回隊列  4.

《Effective C#中文版: 改善C#程式的50種方法》De讀書筆記(推薦) .

本文轉自:http://blog.csdn.net/jpr1990/article/details/6691455 其實這本書我都借了好久,一直沒有系統的看,所以趁這兩天好好看看,順便總結了一些要點,給那些需要這方面知識而又沒有太多時間的IT人一個快速的學習機會。。。。如果要深入學習,請購買該書。

總頁數: 4314 1 .... 4164 4165 4166 4167 4168 .... 4314 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.