欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

c#客戶端內(nèi)存優(yōu)化的方法-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

鐘樓網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計(jì)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)從2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)c#客戶端內(nèi)存優(yōu)化的方法,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

背景概述

C# 開發(fā)客戶端系統(tǒng)的時(shí)候,.net 框架本身就比較消耗內(nèi)存資源,特別是xp 這種老爺機(jī)內(nèi)存配置不是很高的電腦上運(yùn)行,所以就需要進(jìn)行內(nèi)存上的優(yōu)化,才能流暢的在哪些低端電腦上運(yùn)行. 想要對(duì)C# 開發(fā)的客戶端內(nèi)存優(yōu)化需要了解以下幾個(gè)概念。

虛擬內(nèi)存

這里引用百度百科的概念:虛擬內(nèi)存是計(jì)算機(jī)系統(tǒng)內(nèi)存管理的一種技術(shù)。它使得應(yīng)用程序認(rèn)為它擁有連續(xù)的可用的內(nèi)存(一個(gè)連續(xù)完整的地址空間),而實(shí)際上,它通常是被分隔成多個(gè)物理內(nèi)存碎片,還有部分暫時(shí)存儲(chǔ)在外部磁盤存儲(chǔ)器上,在需要時(shí)進(jìn)行數(shù)據(jù)交換。目前,大多數(shù)操作系統(tǒng)都使用了虛擬內(nèi)存,如Windows家族的“虛擬內(nèi)存”;Linux的“交換空間”等。

一句話概括虛擬內(nèi)存既是使用磁盤,物理磁盤進(jìn)行虛擬化出來的內(nèi)存空間。

物理內(nèi)存

物理內(nèi)存(Physical memory)是相對(duì)于虛擬內(nèi)存而言的。物理內(nèi)存指通過物理內(nèi)存條而獲得的內(nèi)存空間,而虛擬內(nèi)存則是指將硬盤的一塊區(qū)域劃分來作為內(nèi)存。內(nèi)存主要作用是在計(jì)算機(jī)運(yùn)行時(shí)為操作系統(tǒng)和各種程序提供臨時(shí)儲(chǔ)存。常見的物理內(nèi)存規(guī)格有256M、512M、1G、2G等,現(xiàn)如今隨著計(jì)算機(jī)硬件的發(fā)展,已經(jīng)出現(xiàn)4G、8G甚至更高容量的內(nèi)存規(guī)格。當(dāng)物理內(nèi)存不足時(shí),可以用虛擬內(nèi)存代替。在應(yīng)用中,自然是顧名思義,物理上,真實(shí)存在的插在主板內(nèi)存槽上的內(nèi)存條的容量的大小。看計(jì)算機(jī)配置的時(shí)候,主要看的就是這個(gè)物理內(nèi)存。

GC 垃圾回收機(jī)制

簡(jiǎn)介

C#中和Java一樣是一種系統(tǒng)自動(dòng)回收釋放資源的語言,在C#環(huán)境中通過 GC(Garbage Collect)進(jìn)行系統(tǒng)資源回收,在數(shù)據(jù)基本類型中介紹到,C#數(shù)據(jù)類型分為引用類型和值類型,

值類型保存在Stack上,隨著函數(shù)的執(zhí)行作用域執(zhí)行完畢而自動(dòng)出棧,所以這一類型的資源不是GC所關(guān)心 對(duì)象。GC垃圾回收主要是是指保存在Heap上的資源。

.NET的GC機(jī)制有這樣兩個(gè)問題:

  • 首先,GC并不是能釋放所有的資源。它不能自動(dòng)釋放非托管資源。
  • 第二,GC并不是實(shí)時(shí)性的,這將會(huì)造成系統(tǒng)性能上的瓶頸和不確定性。
     

GC并不是實(shí)時(shí)性的,這會(huì)造成系統(tǒng)性能上的瓶頸和不確定性。所以有了IDisposable接口,IDisposable接口定義了Dispose方法,這個(gè)方法用來供程序員顯式調(diào)用以釋放非托管資源。使用using語句可以簡(jiǎn)化資源管理。

托管資源和非托管資源

上面介紹到,GC只釋放托管資源,那么什么是托管資源和費(fèi)托管資源。

  • 托管資源 : 托管資源指的是.NET可以自動(dòng)進(jìn)行回收的資源,主要是指托管堆上分配的內(nèi)存資源。托管資源的回收工作是不需要人工干預(yù)的,有.NET運(yùn)行庫在合適調(diào)用垃圾回收器進(jìn)行回收。
  • 非托管資源:非托管資源指的是.NET不知道如何回收的資源,最常見的一類非托管資源是包裝操作系統(tǒng)資源的對(duì)象,例如文件,窗口,網(wǎng)絡(luò)連接,數(shù)據(jù)庫連接,畫刷,圖標(biāo) 等。這類資源,

垃圾回收器在清理的時(shí)候會(huì)調(diào)用Object.Finalize()方法。默認(rèn)情況下,方法是空的,對(duì)于非托管對(duì)象,需要在此方法中編寫回收非托管資源的代碼,以便垃圾回收器正確回收資源。

  • 總結(jié):托管資源是釋放由GC來完成,釋放的時(shí)間吧不一定,一般是系統(tǒng)感覺內(nèi)存吃緊,會(huì)進(jìn)行緊急回收資源。一個(gè)對(duì)象想成為被回收,首先需要成為垃圾,GC是通過判斷對(duì)象及其子對(duì)象有沒有指向有效的引用,如果沒有GC就認(rèn)為它是垃圾。垃圾回收機(jī)制通過一定的算法得到哪些沒有被被引用、或者不再調(diào)用的資源,當(dāng)這些垃圾達(dá)到一定的數(shù)量時(shí),回啟動(dòng)垃圾回收機(jī)制,GC回收實(shí)際上是調(diào)用了析構(gòu)函數(shù)。垃圾回收機(jī)制意味著你不需要擔(dān)心處理不再需要的對(duì)象了。咱們關(guān)心的主要是非托管資源的釋放。垃圾回收時(shí)對(duì)象一共有三代 :0,1,2。每一代都有自己的內(nèi)存預(yù)算,空間不足的時(shí)候會(huì)調(diào)用垃圾回收。為了提高性能都是按代回收,第0代超預(yù)算之后就回收第0代的對(duì)象,而存活下來的對(duì)象就提升為第1代,依次類推,而往往經(jīng)過多次0代的垃圾回收才能回收一次第1代。
     

GC進(jìn)行垃圾回收是系統(tǒng)決定的,下面是進(jìn)行強(qiáng)制回收的執(zhí)行代碼(非特殊情況下不要使用此方法,會(huì)影響系統(tǒng)效率,削弱垃圾回收器中優(yōu)化引擎的作用,而垃圾回收器可以確定運(yùn)行垃圾回收的最佳時(shí)間)

//對(duì)所有代進(jìn)行垃圾回收。
GC.Collect();
//對(duì)指定的代進(jìn)行垃圾回收。
GC.Collect(int generation); 
//強(qiáng)制在 System.GCCollectionMode 值所指定的時(shí)間對(duì)零代到指定代進(jìn)行垃圾回收。
GC.Collect(int generation, GCCollectionMode mode); 

本文題目:c#客戶端內(nèi)存優(yōu)化的方法-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://www.chinadenli.net/article24/desgje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)品牌網(wǎng)站建設(shè)自適應(yīng)網(wǎng)站建站公司服務(wù)器托管網(wǎng)站營銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司