看板 MacDev 關於我們 聯絡資訊
大家好,最近應公司需求必須開發一個OSX下的檢測系統... 現在碰到一個卡了很久的問題想請教有沒有建議的做法跟方向 現在程式開始測試時會有一個紀錄測試時間的Label 在程式開始動作的按鈕我寫下了: NSThread *Test_time; NSDate *Test_Time_total = [NSDate date]; -(IBAction)Start:(id)sender{ Test_time = [[NSThread alloc]initWithTarget:self selector:@selector(Test_Time) [Test_time setThreadPriority:0.3]; [Test_time start]; } -(void)Test_Time { #pragma mark Main - For Test Time. @autoreleasepool{ Test_Time_total = [NSDate date]; do{ [_testTimeLabel setStringValue:[NSString stringWithFormat:@"%1.2f s",[[NSDate date] timeIntervalSinceDate:Test_Time_total]]]; }while(AbortPress == NO); } 僅是光這樣而已,當我執行時時間確實會不斷刷新顯示至開始時至現在的時間, 但是XCode中記憶體(Memory Use)以及CPU(Percentage Used)會不斷攀升飆高 我的記憶體有8G攀升到了6.9G CPU幾乎滿載,更不用說寫其他測試METHOD了 想請問大家有沒有建議的方向或做法...就算不加@autoreleasepool也是一樣...謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.134.2 ※ 文章網址: https://www.ptt.cc/bbs/MacDev/M.1470288349.A.48D.html
Blueshiva: 你一直跑一個不會停止的迴圈,當然CPU狂衝啊...用 08/04 14:45
Blueshiva: NSTimer做吧 08/04 14:45
謝謝回應,但是主要測試程式必須用迴圈去跑...設置要跑一個晚上看機器結果 會有停止的迴圈但是時間很長,請問這樣也能用NSTimer去撰寫嗎?謝謝! ※ 編輯: aureolus (60.248.134.2), 08/04/2016 15:10:53
Blueshiva: 你另外開的這個thread除了計算目前時間跟開始測試的時 08/04 15:33
Blueshiva: 間差外,沒看到任何計算,這種需求完全不需要用迴圈去 08/04 15:34
Blueshiva: 跑吧... 08/04 15:34
謝謝,時間只是其中一個部分,主要測試有非常多測試Function, 比方說連接USB port..連接訊號 斷開訊號送出...GPIB指令等等 測試會依照使用者設定LOOP多次設置產生LOG這樣,剛剛我將時間用NSTIMER 成功解決了這個問題非常感謝,但是主要測試程序目前看起來只能用執行緒去跑 爬了許多文章有看到NSThread下自動釋放池在迴圈中好像是無效的...持續研究中 謝謝! ※ 編輯: aureolus (60.248.134.2), 08/04/2016 15:49:00
songooo: 如果說做完一些動作後讓他睡個一秒呢 08/04 18:20
songooo: [NSThread sleepForTimeInterval:1]; 08/04 18:21
Esvent: Update UI的動作建議一定要在main thread做 08/04 22:35
Esvent: 你這支程式如果把update timelabel那行dispatch到主線程去 08/04 22:36
Esvent: 記憶體的上升速度就會明顯下降很多 08/04 22:37
Esvent: 然後迴圈最好設個最小執行時間 執行時間小於該時間就sleep 08/04 22:40
Esvent: 如果以會update UI的迴圈來說的話 就是1/60秒 08/04 22:41
Esvent: 更新的比螢幕更新頻率還快的話也是看不到 沒什麼意義 08/04 22:44
非常感謝兩位的幫忙,Update UI要用dispatch我有深刻體驗了...非常感謝建議 加入後整個UI記憶體使用量下降非常多,現在都能控制整體在30~50m之間 睡個一秒這個我也試過了,但是對測試時間來說加太多反而會不能達到預期結果 CPU跟記憶體目前有明顯改善有下降了,不過還是會隨著程式跑越久迴圈疊加越多 這點還在持續研究記憶體洩漏的問題,感謝各位大力協助! ※ 編輯: aureolus (60.248.134.2), 08/05/2016 14:41:02