亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        VC6.0在32位機(jī)中對(duì)大數(shù)據(jù)量文件操作的擴(kuò)展

        2013-01-01 00:00:00褚曉冬
        科技資訊 2013年2期

        摘 要:目前,隨著計(jì)算機(jī)在各個(gè)產(chǎn)業(yè)部門(mén)的逐漸普及、計(jì)算機(jī)運(yùn)算能力的逐步提高以及各種新型需求的誕生,對(duì)文件存儲(chǔ)以及訪問(wèn)的需求也隨之升高,人們已經(jīng)不能滿足于基于兆級(jí)的數(shù)據(jù)文件的訪問(wèn),更大的數(shù)據(jù)文件的訪問(wèn)和支持能力對(duì)開(kāi)發(fā)人員提出了更高的要求,但是,受計(jì)算機(jī)硬件條件、系統(tǒng)軟件的版本以及軟件開(kāi)發(fā)版本的約束,我們并不能大刀闊斧的對(duì)軟件進(jìn)行徹底修改,否則會(huì)對(duì)軟件的兼容性造成非常嚴(yán)重的危害,因此我們需要針對(duì)不同情況來(lái)分別對(duì)各種大型數(shù)據(jù)進(jìn)行遍歷,從而保證軟件在不同配置的計(jì)算機(jī)上能夠順利運(yùn)行。

        關(guān)鍵詞:新型需求 徹底修改 遍歷

        中圖分類(lèi)號(hào):TP3 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-3791(2013)01(b)-0024-01

        在石油及礦產(chǎn)勘探領(lǐng)域,經(jīng)常使用不同方式對(duì)地層進(jìn)行探測(cè),隨著探測(cè)手段日益增強(qiáng),衍生出的數(shù)據(jù)量也越來(lái)越大,從早期的幾十兆到現(xiàn)在的幾個(gè)G的級(jí)別,不僅對(duì)計(jì)算機(jī)的要求日益提高,同時(shí)對(duì)軟件開(kāi)發(fā)人員也提出了更高的要求:開(kāi)發(fā)人員要花費(fèi)大量精力來(lái)優(yōu)化內(nèi)存以及CPU的使用,并且還要針對(duì)一些數(shù)據(jù)結(jié)構(gòu)不能操作大型數(shù)據(jù)進(jìn)行擴(kuò)展。本文針對(duì)某油田測(cè)井?dāng)?shù)據(jù)格式的大數(shù)據(jù)量文件的操作,分別闡述了幾種不同情況的處理方法。

        本程序是基于VC6.0開(kāi)發(fā)的,其運(yùn)行環(huán)境為32位Windows系統(tǒng)。

        1 修改數(shù)據(jù)描述格式

        首先,我們需要面對(duì)的是數(shù)據(jù)格式不能滿足需求的問(wèn)題,對(duì)所有標(biāo)識(shí)文件數(shù)據(jù)塊大小的字段進(jìn)行類(lèi)型的修改,原有的代碼中沒(méi)有考慮到大數(shù)據(jù)量的可能性,對(duì)數(shù)據(jù)塊大小的描述都是采用的整型int型或長(zhǎng)整型long格式,由于采用的是有符號(hào)整型,所以其只能標(biāo)識(shí)-2147483648~2147483648的文件塊大小,這對(duì)于一般的線性數(shù)據(jù)塊大小是足夠的,但是對(duì)于大范圍的波列數(shù)據(jù)以及矩陣類(lèi)型數(shù)據(jù)的描述就捉襟見(jiàn)肘了。本程序采用了一種叫做ULONGLONG的據(jù)格式,該格式為無(wú)符號(hào)64位數(shù)據(jù)格式,理論上可以達(dá)到0~18446744073709551616的存儲(chǔ)長(zhǎng)度,這樣的話對(duì)于任意可能存在的數(shù)據(jù)長(zhǎng)度,該格式都是足夠描述的。

        2 采用內(nèi)存映射

        其次,我們采用了內(nèi)存映射方式來(lái)克服大塊內(nèi)存的分配問(wèn)題:對(duì)于內(nèi)存分配,我們的數(shù)據(jù)格式是連續(xù)存儲(chǔ)的,對(duì)于每塊特定的數(shù)據(jù)內(nèi)容,其讀取和寫(xiě)入也必須是連續(xù)的,因此在處理大數(shù)據(jù)量的數(shù)據(jù)操作時(shí),常常會(huì)遇到需要分配巨大內(nèi)存空間的問(wèn)題,而對(duì)于32位操作系統(tǒng),系統(tǒng)本身可識(shí)別的內(nèi)存僅為4G,除掉其他程序耗費(fèi)掉的內(nèi)存,系統(tǒng)在分配大內(nèi)存空間上就顯得力不從心,即使能夠分配成功,其程序的執(zhí)行效率也會(huì)變得極低。除此之外,在多次處理大數(shù)據(jù)量的數(shù)據(jù)過(guò)程中,還發(fā)現(xiàn)了一個(gè)特殊的現(xiàn)象,即Windows系統(tǒng)中的內(nèi)存碎片是影響內(nèi)存分配的,我們?cè)诜峙浯髷?shù)據(jù)量的內(nèi)存前,如果已經(jīng)有一些進(jìn)程運(yùn)行,那么可能會(huì)把整個(gè)的內(nèi)存空間打破,如果這些破碎的內(nèi)存任何一塊不足以分配我們所需的內(nèi)存空間,則系統(tǒng)無(wú)法分配內(nèi)存,從而導(dǎo)致內(nèi)存分配失敗,為此我們采用了內(nèi)存映射的手段來(lái)克服大數(shù)據(jù)量數(shù)據(jù)的操作難題,過(guò)程如下。

        (1)首先我們把需要操作的數(shù)據(jù)文件File1進(jìn)行一個(gè)復(fù)制操作,生成一個(gè)新的臨時(shí)文件File1Copy。

        (2)然后聲明一個(gè)內(nèi)存映射對(duì)象CMem MapFile mmf。

        (3)聲明一個(gè)指針,用來(lái)指示共享內(nèi)存中的文件位置LPVOID pDataVoid。

        (4)用CMemMapFile對(duì)象打開(kāi)臨時(shí)文件if(mmf.MapFile(tempName,TRUE,F(xiàn)ILE_SHARE_READ))

        {pDataVoid=mmf.Open();}

        (5)使用pDataVoid指針可以任意讀取數(shù)據(jù),并且可以把難以分配的大塊數(shù)據(jù)空間進(jìn)行分割操作,從而獲得較好的運(yùn)行效率。

        (6)數(shù)據(jù)操作完畢,刪除臨時(shí)文件,釋放mmf.UnMap()。

        通過(guò)使用內(nèi)存映射,我們有效的規(guī)避的大塊內(nèi)存分配的瓶頸,同時(shí)可以使得讀取和寫(xiě)入文件更加靈活。

        3 采用CFile64遍歷文件

        目前巨大文件越來(lái)越多,對(duì)于本軟件所需要操作的數(shù)據(jù)文件,由于大量的波列和矩陣數(shù)據(jù)的加入,突破G的文件也是越來(lái)越多,甚至有很多已經(jīng)達(dá)到了MFC中CFile類(lèi)可操作數(shù)據(jù)的上限4GB,原因是CFile類(lèi)中使用了32位整型來(lái)處理文件,從而導(dǎo)致了最大處理能力僅為4GB,為了能夠處理這種巨大的文件,我們采用了一種CFile64的文件讀取類(lèi),該類(lèi)繼承于CFile,對(duì)其中的整型數(shù)據(jù)int轉(zhuǎn)換為ULONGLONG格式,并且對(duì)其中的Seek、Read、Write函數(shù)進(jìn)行了重載,從而使得CFile64理論上能夠支持18000000000GB的文件操作,這顯然完全能夠勝任我們的需求,對(duì)于CFile64類(lèi)的使用與原有的MFC中的標(biāo)準(zhǔn)CFile類(lèi)有些不同,主要集中在數(shù)據(jù)的遍歷以及讀取寫(xiě)入函數(shù)上。CFile64打開(kāi)及讀取數(shù)據(jù)代碼如下:

        CFile64 m_file;

        m_file.Open(fileName,GENERIC_WRITE|GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, OPEN_EXISTING)

        POSITION pos;

        m_file.Seek(pos,CFile64::begin,1);

        m_file.Read(&pos,sizeof(long));

        4 結(jié)論

        通過(guò)使用ULONGLONG格式,我們首先解決了在編程過(guò)程中整形變量無(wú)法對(duì)巨大數(shù)據(jù)塊大小描述的問(wèn)題;其次我們通過(guò)內(nèi)存映射,有效的解決了非連續(xù)內(nèi)存塊無(wú)法分配的問(wèn)題和大內(nèi)存耗用情況下程序運(yùn)行效率的問(wèn)題;使用CFile64類(lèi),解決了原有CFile類(lèi)不能操作4GB以上文件的弊端,至此,我們對(duì)VC6.0環(huán)境下基于32位系統(tǒng)操作大文件的能力進(jìn)行了有效的擴(kuò)充,開(kāi)發(fā)出的程序不僅能夠處理4GB以上的大文件,同時(shí)對(duì)內(nèi)存分配的瓶頸也進(jìn)行了有效的規(guī)避。

        參考文獻(xiàn)

        [1]姚全珠.C++面向?qū)ο蟪绦蛟O(shè)計(jì)教程[M].電子工業(yè)出版社,2010.

        [2]Mastering MFC Development Abbas Jamalipoura and Pascal Lorenz Release Date:July,2003.

        [3]鄭秋生.C/C++程序設(shè)計(jì)教程—— 面向?qū)ο蠓謨?cè)[M].電子工業(yè)出版社,2008.

        [4]申德榮,于戈.分布式數(shù)據(jù)庫(kù)系統(tǒng)原理與應(yīng)用[M].機(jī)械工業(yè)出版社,2010.

        [5]張乃孝,宗艷.數(shù)據(jù)結(jié)構(gòu)—C++與面向?qū)ο蟮耐緩剑ㄐ抻啺妫M].高等教育出版社,2005.

        国产麻无矿码直接观看| 色婷婷一区二区三区四区| 中文字幕一区二区三区在线看一区| 亚洲av网站在线观看一页| 草草影院ccyy国产日本欧美| 特级毛片爽www免费版| 国产男女猛烈视频在线观看| 中文字幕久无码免费久久| 国产精品一级黄色大片| 国产精品内射久久一级二| 免费观看又色又爽又湿的视频| 午夜不卡久久精品无码免费| 国产av综合一区二区三区最新| 国产精品一区二区日韩精品| 亚洲少妇一区二区三区老| 国产av一卡二卡日韩av| 人妻少妇出轨中文字幕| 国产精品久久久久久久免费看 | 欧美另类人妖| 欧美色综合高清视频在线| 精品日本一区二区视频| 国产香蕉一区二区三区在线视频| 国产色无码精品视频国产| 久久久久亚洲AV无码专| 日本97色视频日本熟妇视频| 国产自拍偷拍视频免费在线观看| 刺激一区仑乱| 中文字幕一区二区人妻性色| 久久精品国产99久久丝袜| 中国老太老肥熟女视频| 97中文字幕精品一区二区三区 | 国产午夜视频在线观看免费| 国产精品久久久久久影视 | 亚洲中文字幕无码久久2018| 91羞射短视频在线观看| 免费无码又爽又高潮视频| 国产在线无码一区二区三区 | 精品人妻丰满久久久a| 中文字幕av素人专区| 中文字幕乱码无码人妻系列蜜桃| 亚洲av无码第一区二区三区|