Time of Update: 2018-12-07
1. 主題:C#開發當中,多線程很多時候都必不可少的,尤其有處理多任務的情況下; 2. 有圖有真相: 3.源碼: View Code
Time of Update: 2018-12-07
1. C#開發C/S程式,有時需要幾個端,如伺服器端,管理端,用戶端等等, 端與端之間是不同線程或者進程,這就涉及跨線程調用的問題, 使用委託或者非同步線程是必不可少的,這裡是一個簡單的委託線程,即通過委託調用另外一個線程; 2. 有圖有真相: 3. 源碼:View Code using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.
Time of Update: 2018-12-07
前台線程(Foreground)後台線程(Background) 相互作用: 當所有前台線程退出的時候, CLR會強制終止所有的後台線程,並且不會有異常拋出 請參考以下代碼(摘自CLR via C# ): 代碼Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->using System;using System.Threading;public
Time of Update: 2018-12-07
平時new算是使用非常頻繁的一個關鍵字這裡只是描述 new object() 這種類型的作用其他的暫時不涉及到,本文的內容也比較簡單,就列出了一些常用的流程 1.在第一次訪問某個程式集的時候
Time of Update: 2018-12-07
因為水平有限 不知道怎麼用中文表達Cache Lines 和 False Sharing (暫時把他們翻譯為 高速緩衝區和錯誤共用,如有謬誤,還請有識之士指正) 現在的cpu 一般擁有多個核心和一個cpu內的緩衝(一般是L2?)這些緩衝一般位於cpu晶片內, 他的速度遠遠高於主板上的記憶體,一般來說cpu會把資料從記憶體載入到緩衝中 ,這樣可以獲得更好的效能(特別是頻繁使用的資料)這個快取預設劃分64 Byte為一個地區(這個數字可能在不同的平台上不一樣, 可以通過 win32 api 函數
Time of Update: 2018-12-07
Source CodeProblem: 1001Memory: 244K Time: 47MSLanguage: C++ Result: AcceptedSource Code#include <iostream>#include <string>#include <algorithm>using namespace std;string multiWithChar(string a,char b);string
Time of Update: 2018-12-07
----------------------------------------------//okint ival( 1024 );int ival(int()); //每種內建資料類型都支援一種特殊的建構函式文法可將對象初始化為0int ival=int();-------------------------------------------------試圖將一個非const 對象的指標指向一個常量對象的動作都將引起編譯錯誤,const 對象的地址只能賦值給指向const 對象的指標,
Time of Update: 2018-12-07
代碼 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->//============================================================================// Name : Sort.cpp// Author : // Version :// Copyright
Time of Update: 2018-12-07
一年多沒接觸C#開發了,複習一下Winform方面的知識: C#開啟、關閉進程,擷取進程列表; 有圖有真相: 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Text; 7 using System.Windows.Forms; 8 using Syste
Time of Update: 2018-12-07
DotNet項目在Debug 和Release 模式一個主要的差別就是有沒有開啟編譯器最佳化在release下由於採用了編輯器最佳化,那麼原來有些運行正常的代碼就會出問題下面一段代碼就是這樣 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->internal static class StrangeBehavior{// As you'll see
Time of Update: 2018-12-07
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")
Time of Update: 2018-12-07
單一實例應用程式指的是在你的作業系統中你只能開一個的程式例如說outlook以下代碼通過 Semaphore 實行了一個單一實例的控制(事實上你使用EventWaitHandle 或者 Mutex都是可以的)原理是因為windows不允許重名的核心對象 ,例子中是
Time of Update: 2018-12-07
在c#裡面我們經常編寫下面的代碼來檢查輸入的字串是不是合法的 string someString = null;if (someString == null || someString.Length == 0) {//do some thing }if (string.IsNullOrEmpty(someString)) {//do some thing
Time of Update: 2018-12-07
本文主要描述為了保證線程同步和資料安全採用的若干種不同方案以鎖為例:1.使用者模式(User-Mode)比核心模式(Kernel-Mode)快很多2.windows作業系統無法發現使用者模式的鎖 (即使已經被Blocked了) ,所以線程池也不會為此建立一個線程處理新的請求3.核心模式的鎖可以使得線程停止運行,
Time of Update: 2018-12-07
這三個對象都經常用於線程同步下面是一些他們的異同點 1.當多個線程在等待一個 AutoResetEvent的時候,每次調用AutoResetEvent.Set()方法只會喚醒一個線程2.當多個線程在等待一個ManualResetEvent的時候,每次調用ManualResetEvent.Set()方法會喚醒所有等待的線程3.當多個線程在等待一個Semaphore的時候,每次調用Semaphore.Release(Int releaseCount)的時候 將喚醒releaseCount個線程
Time of Update: 2018-12-07
Thread.Sleep(-1)通知系統不要調度該線程,事實上這個方法沒什麼用,因為它讓線程一直活著又什麼都不做,建議是直接終結了現場 Thread.Sleep(0)告訴系統當前線程不需要剩下的時間片了,請系統去調度其他的線程但是系統經過計劃以後有可能還是覺得當前線程比較重要,又繼續執行當前線程這取決於優先順序,如果其他優先順序都比當前優先順序低的話,那麼當前線程會繼續 Thread.Sleep(1)強制環境切換,線程會休眠超過1毫秒 Thread.Sleep(int)休眠線程多少毫秒.因為wi
Time of Update: 2018-12-07
條件變數模式(The Condition variable Pattern)指的是一個任務在等待一個變數的狀態.(例如一個線程當變數為true的時候執行,否則就一直在休眠狀態) 以下代碼示範了Thread1 一直在等待m_condition的狀態Thread1在等待狀態改變的過程中,間歇性的暫時釋放鎖的控制權這樣Thread2就有機會獲得到鎖,改變m_condition的狀態,並且執行Pulse(All)方法,
Time of Update: 2018-12-07
比較子一般指的是 ==在javascript裡面以下值是等價的 alert(0 == ''); //true alert(0 == '0'); //ture alert(false == '0'); //ture alert(null == undefined); //ture alert(0 == '\t\r\n');
Time of Update: 2018-12-07
經常遇到情境 需要檢查 一個字串是不是null 如果是就設定預設值在C#中可以用下面3個方法初始化 string someString = null;if (someString == null) { someString = "default value"; } someString = (someString == null) ? someString :
Time of Update: 2018-12-07
總是很常見到一些說法是實值型別總是分配在堆棧上,參考型別總是分配在堆上(google搜尋大約10萬條記錄- -)最近仔細思考了一下發現有點問題....當然我個人水平有限, 有什麼差錯還請大家指正個人總結的c#實值型別和應用類型的分配應該是: 應用類型肯定在託管堆上,實值型別總是和上下文有關 1.類的執行個體成員, 類是參考型別,總是分配在堆上,那麼a的記憶體就在ClassA的執行個體的記憶體裡,也必然在堆上Code highlighting produced by Actipro