記 static 幫我解決的問題

先說遇到的問題豆胸,
項目的業(yè)務(wù)邏輯中奥洼,有巡檢的單子派發(fā)到某個人之后,需要先進行開始巡檢配乱,然后逐項巡檢溉卓,最后提交保存。
問題出現(xiàn)在搬泥,在開始巡檢的時候桑寨,速度會非常之慢。主要表現(xiàn)在數(shù)據(jù)庫有50萬條數(shù)據(jù)(單子)忿檩。每一個巡檢項尉尾,從模板表寫入到巡檢錄入中間表的時候,打印日志顯示4秒平均一個燥透。然而每天會有100+的單子沙咏,每個單子30~40項不等的巡檢項,可想而知會有多慢班套。
受不了當(dāng)前的速度肢藐,就開始打斷點查找原因
最終定位問題在下面這個方法:

+ (NSString *)getInspectionContensID {
    
    NSString *uuidString = [WJHUUIDManager getUUIDString];
    
    NSString *sql = [NSString stringWithFormat:@" SELECT ID FROM om_on_inspection_entry_mg "];
    NSMutableArray *uuidArray = [[WJHDBManager sharedManager] selectWithSql:sql andOneArr:@[@"ID"]];
    
    if (uuidArray.count == 0) {
        return uuidString;
    }else {
        
        for (NSArray *arr in uuidArray) {
            if ([[[arr firstObject] objectForKey:@"ID"] isEqualToString:uuidString]) {
               return  [WJHUUIDManager getInspectionContensID];
            }else {
                return uuidString;
            }
        }
    }    
}

每一個巡檢項都需要一個UUID來唯一確定,為了不和已有的UUID重復(fù)吱韭,這里就是來防止重復(fù)的吆豹。
顯然問題是很明顯的,50萬級別的數(shù)據(jù)理盆,每次都去數(shù)據(jù)庫中查一遍痘煤,然后再作比對,很明顯猿规,時間都浪費在查詢上了衷快。下面,就開始介紹 static如何幫助到我的姨俩。
首先蘸拔,static 靜態(tài)變量:

1.作用于變量:
用static聲明局部變量時,則改變變量的存儲方式(生命期)环葵,使變量成為靜態(tài)的局部變量都伪,即編譯時就為變量分配內(nèi)存,直到程序退出才釋放存儲單元积担。這樣陨晶,使得該局部變量有記憶功能,可以記憶上次的數(shù)據(jù),不過由于仍是局部變量先誉,因而只能在代碼塊內(nèi)部使用(作用域不變)

用static聲明外部變量-------外部變量指在所有代碼塊{}之外定義的變量湿刽,它缺省為靜態(tài)變量,編譯時分配內(nèi)存褐耳,程序結(jié)束時釋放內(nèi)存單元诈闺。
同時 其作用域很廣,整個文件都有效甚至別的文件也能引用它铃芦。為了限制某些外部變量的作用域雅镊,使其只在本文件中有效,而不能被其他文件引用刃滓,
可以用static 關(guān)鍵字對其作出聲明仁烹。

 靜態(tài)變量的優(yōu)點:
    1、節(jié)省內(nèi)存咧虎。靜態(tài)變量只存儲一處卓缰,但供所有對象使用。
    2砰诵、它的值是可以更新的征唬。
    3、可提高時間效率茁彭。只要某個對象對靜態(tài)變量更新一次总寒,所有的對象都能訪問更新后的值。

另:

2.作用于函數(shù):使用static用于函數(shù)定義時理肺,對函數(shù)的連接方式產(chǎn)生影響摄闸,使得函數(shù)只在本文件內(nèi)部有效,對其他文件是不可見的哲嘲。這樣的函數(shù)又叫作靜態(tài)函數(shù)。使用靜態(tài)函數(shù)的好處是媳禁,不用擔(dān)心與其他文件的同名函數(shù)產(chǎn)生干擾眠副,另外也是對函數(shù)本身的一種保護機制。如果想要其他文件可以引用本地函數(shù)竣稽,則要在函數(shù)定義時使用關(guān)鍵字extern囱怕,表示該函數(shù)是外部函數(shù),可供其他文件調(diào)用毫别。另外在要引用別的文件中定義的外部函數(shù)的文件中娃弓,使用extern聲明要用的外部函數(shù)即可。

以上是對其的解釋岛宦,總之台丛,現(xiàn)在我優(yōu)化的方向就是,這些巡檢項的UUID我只查詢一次就存儲起來,之后挽霉,直接拿來用防嗡,這樣速度可定就很快了,而且生成了新的就及時的添加到新的存儲中侠坎。
如此蚁趁,便優(yōu)化到了下面

static NSMutableArray *inspectionUUID;

@implementation WJHUUIDManager



+ (NSMutableArray *)readLocalFile {
    
    static dispatch_once_t predicate;
    dispatch_once(&predicate, ^{
        
        NSString *sql = [NSString stringWithFormat:@" SELECT ID FROM om_on_inspection_entry_mg "];
        inspectionUUID = [[WJHDBManager sharedManager] selectWithSql:sql andOneArr:@[@"ID"]];
    });
    
    return inspectionUUID;
}

+ (NSString *)getInspectionContensIDWithContentID:(NSMutableArray *)contentID {
    
    NSString *uuidString = [WJHUUIDManager getUUIDString];
    
    
    if (contentID.count == 0) {
        
        inspectionUUID = [WJHUUIDManager readLocalFile];
        if (inspectionUUID.count == 0) {
            
            return uuidString;
        }else {
            
            if ([inspectionUUID containsObject:uuidString]) {
                
                [inspectionUUID addObject:uuidString];
                return [WJHUUIDManager getInspectionContensIDWithContentID:inspectionUUID];
            }else {
                
                return uuidString;
            }
            
        }
    }else {
        
        if ([contentID containsObject:uuidString]) {
            
            [contentID addObject:uuidString];

            return [WJHUUIDManager getInspectionContensIDWithContentID:contentID];
        }else {
            
            return uuidString;
        }
    }
   
}

@end

這樣,就實現(xiàn)了实胸,只查詢一次所有的巡檢項的UUID他嫡,并將其存儲起來,之后的直接拿來比較就好庐完。
最后钢属,速度上的提升是這樣的。 同一個巡檢單假褪,之前是3分鐘署咽,優(yōu)化之后,也就6s吧生音。哈哈宁否,問題解決了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缀遍,一起剝皮案震驚了整個濱河市慕匠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌域醇,老刑警劉巖台谊,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異譬挚,居然都是意外死亡锅铅,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門减宣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盐须,“玉大人,你說我怎么就攤上這事漆腌≡舻耍” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵闷尿,是天一觀的道長塑径。 經(jīng)常有香客問我,道長填具,這世上最難降的妖魔是什么统舀? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上绑咱,老公的妹妹穿的比我還像新娘绰筛。我一直安慰自己,他們只是感情好描融,可當(dāng)我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布铝噩。 她就那樣靜靜地躺著,像睡著了一般窿克。 火紅的嫁衣襯著肌膚如雪骏庸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天年叮,我揣著相機與錄音具被,去河邊找鬼。 笑死只损,一個胖子當(dāng)著我的面吹牛一姿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播跃惫,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼叮叹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了爆存?” 一聲冷哼從身側(cè)響起蛉顽,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎先较,沒想到半個月后携冤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡闲勺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年曾棕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片菜循。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡翘地,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出债朵,到底是詐尸還是另有隱情子眶,我是刑警寧澤瀑凝,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布序芦,位于F島的核電站,受9級特大地震影響粤咪,放射性物質(zhì)發(fā)生泄漏谚中。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宪塔。 院中可真熱鬧磁奖,春花似錦、人聲如沸某筐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽南誊。三九已至身诺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間抄囚,已是汗流浹背霉赡。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留幔托,地道東北人穴亏。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像重挑,于是被迫代替她去往敵國和親嗓化。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容