[摘要] 在油藏動(dòng)態(tài)分析中,經(jīng)常按照優(yōu)先級(jí)進(jìn)行區(qū)域內(nèi)井的數(shù)據(jù)統(tǒng)計(jì),數(shù)據(jù)的篩選條件不是互斥的,但井不能重復(fù)統(tǒng)計(jì)。對(duì)大量數(shù)據(jù)進(jìn)行統(tǒng)計(jì)計(jì)算,既要滿足算法上的要求,又要保證運(yùn)行效率。本文結(jié)合軟件開發(fā)實(shí)例,探討StringBuilder類在動(dòng)態(tài)分析優(yōu)先級(jí)篩選中的優(yōu)勢(shì)。
[關(guān)鍵詞] StringBuilder類;優(yōu)先級(jí)篩選;最優(yōu)方式
[中圖分類號(hào)] F270.7 [文獻(xiàn)標(biāo)識(shí)碼] A [文章編號(hào)] 1673 - 0194(2013)05- 0050- 02
1 問題提出
在油藏動(dòng)態(tài)分析中,經(jīng)常進(jìn)行一個(gè)區(qū)塊或組織機(jī)構(gòu)(礦、隊(duì))的產(chǎn)油量、注水量變化分析統(tǒng)計(jì),對(duì)統(tǒng)計(jì)區(qū)域內(nèi)所有井的篩選條件不是互斥的,后面的篩選條件和前面的篩選條件可能會(huì)選擇到同一口井,實(shí)際工作中又要求數(shù)據(jù)統(tǒng)計(jì)不能重復(fù),因此不能直接按照每個(gè)條件進(jìn)行數(shù)據(jù)提取,否則會(huì)造成數(shù)據(jù)的重復(fù)統(tǒng)計(jì),這就涉及按照優(yōu)先級(jí)進(jìn)行篩選的問題。
如何通過機(jī)器運(yùn)算實(shí)現(xiàn)按照優(yōu)先級(jí)進(jìn)行統(tǒng)計(jì)?上千口井的篩選如何能保證響應(yīng)速度呢?對(duì)于這類問題,我們一般用字符串?dāng)?shù)組、集合、StringBuilder類等方式進(jìn)行處理。本文將結(jié)合開發(fā)實(shí)例,探討動(dòng)態(tài)分析中批量井號(hào)優(yōu)先級(jí)篩選處理的最優(yōu)方式。
2 StringBuilder類在存儲(chǔ)空間和運(yùn)行效率方面的優(yōu)勢(shì)
StringBuilder類是Dot Net開發(fā)環(huán)境中System.Text名字空間下對(duì)字符串進(jìn)行操作的一個(gè)類。
2.1 存儲(chǔ)空間方面的優(yōu)勢(shì)
StringBuilder對(duì)象的字符數(shù)超出預(yù)先設(shè)置的容量時(shí),開發(fā)環(huán)境會(huì)自動(dòng)為StringBuilder對(duì)象追加內(nèi)存空間,保證了內(nèi)存空間使用的合理性,最大程度上節(jié)省內(nèi)存資源。
2.2 運(yùn)行效率方面的優(yōu)勢(shì)
StringBuilder封裝了Append()、Insert()、Remove()、Replace()等方法,這些方法的算法是C#環(huán)境優(yōu)化過的,執(zhí)行效率非常高,非常適合超大字符串的處理。
2.3 字符串?dāng)?shù)組和集合處理超大字符串的不足
字符串?dāng)?shù)組和集合首先要申請(qǐng)定額的內(nèi)存空間,在處理超長(zhǎng)字符串時(shí)可能會(huì)出現(xiàn)溢出的情況,存在存儲(chǔ)空間方面的問題。另外,字符串?dāng)?shù)組和集合的遍歷、插入和刪除都要消耗大量的系統(tǒng)資源,對(duì)于超長(zhǎng)字符串來說,運(yùn)行速度較慢。
3 StringBuilder類在井號(hào)優(yōu)先級(jí)篩選中的開發(fā)實(shí)例
動(dòng)態(tài)分析中,產(chǎn)量變化分析要求對(duì)比統(tǒng)計(jì)區(qū)域內(nèi)井的兩個(gè)月份的日產(chǎn)數(shù)據(jù),按照優(yōu)先級(jí)統(tǒng)計(jì)產(chǎn)量增加部分和產(chǎn)量減少部分,實(shí)現(xiàn)區(qū)域內(nèi)產(chǎn)量變化原因分析,見表1。