C 中構建多執行緒應用程式

時間 2023-07-25 11:07:28

高手進~ c# 多執行緒處理

1樓:匿名使用者

非同步多執行緒記憶體釋放主要靠自己,c#的垃圾**機制是,只有當程式段執行完畢後,垃圾**機制才對程式開闢的記憶體進行垃圾**。而多執行緒內的程式,特別是客戶端連線,只要客戶端沒有斷開連線,你的執行緒就會繼續執行,除非斷開客戶端,執行緒的生命週期結束,垃圾**機制才會對該執行緒產生佔用的記憶體進行**。如果客戶端沒有斷開,你就要注意**程執行的過程中去清除垃圾。

一般記憶體不但增大大多數是迴圈建立引用記憶體造成的,所以要留意你執行緒中每一個引用型別的建立。至於釋放,一是**程結束讓系統自動**,二是手動**。但我建議你給你的資料儲存區指定大小。

你的資料儲存應該是這樣一個過程,資料儲存區一般接受底端資料,一邊釋放過期資料。例如建立的listdatas = new list(),控制你的最大條數是100條,那麼當》100時,就remove掉多餘的。

希望對你有幫助。

2樓:匿名使用者

.net的垃圾**是自動的,當機器的記憶體有壓力時會被自動觸發。而沒有人知道是什麼時候。

net的開發人員不主張程式設計師自己使用進行垃圾**。

如果一定要使用,需要兩次;

第一次尋找可以被**的資源,並把他們放置到“準備好被**”的佇列了。

第二次施放這個“準備好被**”列隊裡的所有元素。

如果記憶體持續上升,可以使著看看自己的**有沒有造成記憶體洩露。

比如哪些有idisposable的類open以後沒有被close或者dispose,這是造成記憶體流失的原因之一。

socket類本身也implement了idisposable,所以使用的時候注意有沒有close()

或者用(using socket socket = new socket())

被包含在using語句中的部分。net會自動dispose,不會造成潛在記憶體流失。

另一個可能造成記憶體流失的原因是 事件綁有其他方法,但在不使用以後沒有取消邦定。

不好意思,我表達的不是很好)

比如 loaded +=onloaded;

private void onloaded (object sender, routedeventargs e)

以下習慣也可以某種程度上的降低記憶體洩露。

loaded -=onloaded;

但不是所有事件繫結會造成記憶體洩露。

如何用c#編寫多執行緒的與窗體互動的程式

3樓:翲燚

c#中的ui元素是主執行緒建立的,也只能通過建立它們的主執行緒進行修改,這是因為ui元素本身不是執行緒安全的,多執行緒操作會發生不可預料的錯誤。因此,預設情況下,嘗試從其他執行緒操作ui元素會引發異常,雖然你可以通過下面的**強制允許ui元素的跨執行緒操作:

checkforillegalcrossthreadcalls = false;

但是,這樣做是不推薦的。一般對於ui元素的跨執行緒操作推薦使用。

method);

method, params object args);

invoke方法可以由任何執行緒呼叫,但只會在建立form的主執行緒上執行相應的delegate。

一段最簡示例如下:

private void button1_click(object sender, eventargs e)

private void threadaction()

private void uiaction()

因為invoke的引數包括delegate委託,因此你需要根據要invoke的方法的引數、返回值,定義對應的delegate,然後才能呼叫。在上面的例子中,uiaction方法無引數、無返回,所以直接使用了methodinvoker這個自帶的delegate。

c#多執行緒問題

4樓:路有時不在腳下

改變連線機制,提供思考模式如下:

一、區域網模式。

1、伺服器啟動監聽埠;

2、客戶端向服務發出連線請求,同時建立一個隨機監聽埠,並進行監聽;

3、伺服器接收到連線請求後建立一個連線,進行基本訊息驗證,驗證通過,讀取訊息協議中客戶端的ip和隨機埠,向客戶端發出連線請求,同時釋放伺服器端監聽建立的連線,以便處理下一個監聽;

4、客戶端與伺服器重新連線進行具體的通訊。

二、廣域網模式。

1、伺服器啟動監聽埠;

2、客戶端向服務發出連線請求;

3、伺服器接收到連線請求後建立一個連線,進行基本訊息驗證,驗證通過,建立一個隨機監聽埠,並把埠資訊返回到客戶端,同時釋放伺服器端監聽建立的連線,以便處理下一個監聽;

4、客戶端接收到伺服器端返回的埠資訊後再向伺服器連線;

4、客戶端與伺服器重新連線進行具體的通訊。

C 如何運用多執行緒 5,C 中構建多執行緒應用程式

thread th1 new thread new threadstart aa 執行緒1 thread th2 new thread new threadstart aa 執行緒2 thread th3 new thread new threadstart aa 執行緒3 執行緒1啟動。執行緒2啟...

怎麼用c語言開啟應用程式,怎麼用C語言開啟一個應用程式

吉祥二進位制 c語言中開啟一個應用程式可以呼叫system 也可以呼叫作業系統的api函式,比如windows系統可以呼叫createprocess shellexecuteex 等函式來開啟一個應用程式。include include int main 安徽新華電腦專修學院 fopen函式用來開啟...

應用程式無法正常啟動0c0000005win764位

你在補丁裡把那個補丁關掉 西西哩的小馬甲 0xc0000005錯誤發生的誘因主要分為四大類 1 自由表儲存載體的缺陷 主要體現在vcx vct,scx和sct上 2 第三方監控性質的軟體。如 防毒軟體在記憶體即時監控狀態下 詞霸軟體在全屏拾取模式下等 3 visualfoxpro自身的 漏洞 4 硬...