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