杜小虎
摘要:隨著科學(xué)技術(shù)的飛躍發(fā)展,計(jì)算機(jī)技術(shù)的日益進(jìn)步,我們?cè)谌粘I钪杏?jì)算機(jī)也變得不可或缺,在計(jì)算機(jī)的應(yīng)用中,我們時(shí)常會(huì)因?yàn)閮?nèi)存問(wèn)題而困擾,就是系統(tǒng)占用內(nèi)存與運(yùn)行內(nèi)存之間的糾結(jié),其實(shí)內(nèi)存是電腦中重要的一個(gè)部件,當(dāng)電腦與CPU進(jìn)行溝通時(shí)就需要通過(guò)內(nèi)存這個(gè)中間橋梁進(jìn)行中間操作。計(jì)算機(jī)中所運(yùn)行的所有程序都是在內(nèi)存中進(jìn)行的運(yùn)算的,因此內(nèi)存的工作狀態(tài)對(duì)計(jì)算機(jī)的運(yùn)行效率影響是非常大的,也就有了系統(tǒng)內(nèi)存和系統(tǒng)占用內(nèi)存之間的關(guān)系。此文意在利用C#來(lái)查詢(xún)監(jiān)控計(jì)算機(jī)內(nèi)部軟件內(nèi)存,利用該系統(tǒng)使用者可以隨時(shí)檢測(cè)到計(jì)算機(jī)所占用的內(nèi)存空間,對(duì)計(jì)算機(jī)進(jìn)行維護(hù),是一個(gè)快捷實(shí)用的系統(tǒng),在系統(tǒng)實(shí)施階段,使用Microsoft Visual Studio.Net 2010作為前臺(tái)開(kāi)發(fā)工具,C#作為基礎(chǔ)編程語(yǔ)言來(lái)完成此次系統(tǒng)操作。它的成功設(shè)計(jì)與實(shí)現(xiàn)方便了隨時(shí)了解自己計(jì)算機(jī)內(nèi)存占用情況,以便于隨時(shí)清理內(nèi)存,減輕計(jì)算機(jī)壓力,獲得更好的計(jì)算機(jī)快捷體驗(yàn)。
關(guān)鍵詞:C#;系統(tǒng)內(nèi)存;監(jiān)控;系統(tǒng)實(shí)現(xiàn)
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2019)10-0223-02
開(kāi)放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
我們采用的C#語(yǔ)言是一種相對(duì)簡(jiǎn)單的,安全的,操作穩(wěn)定的開(kāi)發(fā)性語(yǔ)言,它的眾多強(qiáng)大功能都是由C和C#延伸出來(lái)的,同時(shí)以自己高效率的運(yùn)行速度,強(qiáng)大的語(yǔ)言操作能力,編寫(xiě)語(yǔ)言的便利性,獨(dú)特性成了,.NET開(kāi)發(fā)的首選語(yǔ)言,我們此次選用C#語(yǔ)言還在于它的便捷的面向組件的支持,例如Process類(lèi)組件,各種強(qiáng)大的實(shí)用的能力也成為了實(shí)現(xiàn)系統(tǒng)軟件內(nèi)存中構(gòu)建各類(lèi)組件的理想之選。它的功能性和簡(jiǎn)潔性不僅方便我們學(xué)習(xí)和運(yùn)用,它的各類(lèi)組件也為系統(tǒng)實(shí)現(xiàn)提供直接渠道。其次,C#語(yǔ)言的普及和簡(jiǎn)易性更容易方便使用者操作。
1 選用C#開(kāi)發(fā)的優(yōu)勢(shì)
1)C#語(yǔ)言是一種相對(duì)簡(jiǎn)單的,安全的,操作穩(wěn)定的開(kāi)發(fā)性語(yǔ)言。
2)C#增強(qiáng)了程序的運(yùn)行效率,同時(shí)它在編寫(xiě)時(shí)沒(méi)有太多的局限性,使得對(duì)它 在系統(tǒng)應(yīng)用起來(lái)中更加靈活。
3)它的設(shè)計(jì),封裝、繼承、多態(tài)都是面向?qū)ο蟮摹?/p>
4).NET為我們提供的垃圾回收器可以方便管理內(nèi)存信息,為我們后來(lái)獲取內(nèi)存大小提供直接渠道。
5)因?yàn)镃#采用.NET的公共語(yǔ)言規(guī)范,從而使得在與其他語(yǔ)言開(kāi)發(fā)的組件中具有兼容性。
6)C#的控制能力和它的靈活性很強(qiáng)使得我們?cè)跈z查系統(tǒng)錯(cuò)誤時(shí)更容易的維護(hù)。
2 系統(tǒng)運(yùn)行內(nèi)存與占用內(nèi)存
每一臺(tái)計(jì)算機(jī)在出廠制造完成后,除了外部設(shè)備存儲(chǔ)外,都會(huì)附帶一定大小的系統(tǒng)運(yùn)行內(nèi)存,以供計(jì)算機(jī)存儲(chǔ)重要信息和運(yùn)行操作,系統(tǒng)在運(yùn)行讀取數(shù)據(jù)時(shí),如果計(jì)算機(jī)內(nèi)存較小,系統(tǒng)對(duì)數(shù)據(jù)分配的內(nèi)存就會(huì)減少,程序就會(huì)頻繁地對(duì)硬盤(pán)進(jìn)行讀取,這就會(huì)極大地降低了計(jì)算機(jī)的讀取速率,整體運(yùn)行速度就會(huì)變得更慢,也就會(huì)出現(xiàn)卡頓現(xiàn)象,所以系統(tǒng)運(yùn)行內(nèi)存越小相對(duì)其計(jì)算機(jī)運(yùn)行速度更快。
內(nèi)存其實(shí)是電腦中重要的一個(gè)部件,只要我們?cè)陔娔X中運(yùn)行任意一個(gè)程序或軟件,CPU就會(huì)把其中所需要運(yùn)算的數(shù)據(jù)調(diào)到內(nèi)存中進(jìn)行運(yùn)算,而在計(jì)算機(jī)中過(guò)多的安裝和使用軟件就會(huì)產(chǎn)生大量的數(shù)據(jù)信息占用系統(tǒng)內(nèi)存,當(dāng)系統(tǒng)所被占用的內(nèi)存過(guò)多,計(jì)算機(jī)對(duì)于數(shù)據(jù)的運(yùn)行速度,處理能力也會(huì)變慢甚至也會(huì)出現(xiàn)卡頓現(xiàn)象,極大的影響使用者的工作效率和體驗(yàn)感,所以需要及時(shí)地了解計(jì)算機(jī)現(xiàn)占用內(nèi)存并及時(shí)清理,提高運(yùn)行效率。
3 Process類(lèi)組件
Process類(lèi)組件為我們提供了對(duì)正在電腦上運(yùn)行的軟件或程序的系統(tǒng)訪問(wèn)。使用Process類(lèi)組件,我們可以得到正在運(yùn)行的系統(tǒng)軟件進(jìn)程的現(xiàn)狀和內(nèi)存的使用情況,或者可以重新啟動(dòng)新的進(jìn)程。我們有時(shí)可以通過(guò)初始化Process類(lèi)組件,來(lái)使用它得到目前有關(guān)程序運(yùn)行進(jìn)程的一些信息,為我們提供了對(duì)程序啟動(dòng)、停止、控制和監(jiān)視的相關(guān)任務(wù)。此類(lèi)信息包括一些線(xiàn)程集、需要加載的模塊和性能信息以及程序中進(jìn)程當(dāng)前使用的內(nèi)存情況。
4 系統(tǒng)實(shí)現(xiàn)
4.1建立一個(gè)windows窗體項(xiàng)目
定義內(nèi)存的信息結(jié)構(gòu)
[StructLayout(LayoutKind.Sequential)]
public struct MEMORY_INFO
{
public uint awL;
public uint awMemory1;
public uint awtotalPhys;
public uint awavailPhys;
public uint awtotalPageFile;
public uint awavailPageFile;
public uint awtotalVirtual;
public uint awavailVirtual;
}
4.2獲取當(dāng)前程序的內(nèi)存使用情況
private void CurrentMemory()
{
Process process=Process.getCurrentProcess();
long usedMemory=process.Workingset64;
label1.Text="當(dāng)前進(jìn)程所耗的內(nèi)存:"+ usedMemory/1024+"KB";
}
4.3添加時(shí)鐘
添加時(shí)鐘,用來(lái)刷新內(nèi)存使用情況,在計(jì)算機(jī)運(yùn)行期間系統(tǒng)中的內(nèi)存也在不斷地分配占用空間,影響實(shí)時(shí)監(jiān)控計(jì)算機(jī)的內(nèi)存時(shí)效性,在這里添加一個(gè)刷新時(shí)鐘,及時(shí)地在預(yù)定時(shí)間內(nèi)對(duì)獲取的數(shù)據(jù)進(jìn)行刷新,起到實(shí)時(shí)監(jiān)控的作用。
private void timer1_Tick(object sender, Eventargs a)
{
currentMemory();
getAllProcess();
}
4.4時(shí)鐘啟止按鈕
界面上添加控制時(shí)鐘開(kāi)啟和停止的按鈕,當(dāng)時(shí)鐘開(kāi)始運(yùn)行時(shí),界面上對(duì)于監(jiān)控到的內(nèi)存數(shù)據(jù)是不斷變化的,設(shè)置一個(gè)啟止按鈕,方便使用者控制數(shù)據(jù),讀取數(shù)據(jù)。
Private void btn run time click(object sender, EvenArgs a)
{
If (btn run time.text==“開(kāi)始時(shí)鐘”)
{
time1.Start():
btn_run.Enabled=false;
btn currrent.Enabled=false;
}
else
{
timer1.Stop();
btn run time.text=”開(kāi)始時(shí)鐘”;
btn run.Eabled=trun;
btn current.Enabled=true;
}
5 系統(tǒng)測(cè)試
首先,對(duì)于系統(tǒng)各個(gè)源代碼實(shí)現(xiàn)的程序單元進(jìn)行單元測(cè)試,對(duì)每一個(gè)模塊是否能及時(shí)地運(yùn)行出預(yù)先設(shè)定的功能進(jìn)行考究,根據(jù)系統(tǒng)設(shè)計(jì)要求進(jìn)行刪改達(dá)到最佳效果,其次,將所有單元模塊集成組裝成最后的系統(tǒng)進(jìn)行監(jiān)控測(cè)試,是否能及時(shí)監(jiān)測(cè)到系統(tǒng)占用內(nèi)存,在各個(gè)單元所能實(shí)現(xiàn)的功能都有效的連接,將已能夠使用的系統(tǒng)與原先預(yù)設(shè)定的需求規(guī)格進(jìn)行確定,是否能夠滿(mǎn)足使用者需求和使用便捷度,最后,將此系統(tǒng)投入對(duì)軟件的監(jiān)控,將監(jiān)測(cè)數(shù)據(jù)與系統(tǒng)數(shù)據(jù)比對(duì),在實(shí)際運(yùn)行環(huán)境下是否能發(fā)現(xiàn)軟件與系統(tǒng)定義不符合或矛盾,及時(shí)地對(duì)與出現(xiàn)的問(wèn)題進(jìn)行整改。系統(tǒng)測(cè)試無(wú)誤后即可以提供給使用者使用。
6 結(jié)束語(yǔ)
此系統(tǒng)嚴(yán)格按照C#的相關(guān)規(guī)范設(shè)計(jì)和開(kāi)發(fā),也運(yùn)用了C#中相關(guān)組件類(lèi)等進(jìn)行輔助設(shè)計(jì),本系統(tǒng)主要是使用者對(duì)于計(jì)算機(jī)軟件消耗內(nèi)存的一個(gè)監(jiān)控系統(tǒng),由于計(jì)算機(jī)的普及速度太快,使用者的整體范圍擴(kuò)大,對(duì)于計(jì)算機(jī)的內(nèi)存管理方法忽視的情況下,針對(duì)使用者設(shè)計(jì)此系統(tǒng),便于及時(shí)的使用系統(tǒng)及時(shí)的監(jiān)測(cè)計(jì)算機(jī)所消耗的內(nèi)存,并及時(shí)的進(jìn)行清理,避免緩存的數(shù)據(jù)過(guò)多影響對(duì)使用數(shù)據(jù)的讀取速率,以及使用者對(duì)于計(jì)算機(jī)使用的舒適度的提高,此系統(tǒng)還設(shè)計(jì)了一個(gè)時(shí)鐘的起止按鈕,及時(shí)進(jìn)行對(duì)于一個(gè)時(shí)間周期的監(jiān)控,能夠?yàn)槭褂谜唠S時(shí)更新數(shù)據(jù),提供監(jiān)測(cè)內(nèi)存。此系統(tǒng)在進(jìn)行系統(tǒng)測(cè)試后已能夠正確的運(yùn)行,能夠滿(mǎn)足預(yù)先設(shè)定的需求規(guī)劃,使用者可以很方便地使用此系統(tǒng)來(lái)檢測(cè)內(nèi)存消耗,避免計(jì)算機(jī)因?yàn)閮?nèi)存過(guò)多卡頓而影響舒適體驗(yàn)度。
【通聯(lián)編輯:謝媛媛】