[問題] 請問有關arc下的記憶體cpu管理

看板MacDev作者 (Aureo)時間9年前 (2016/08/04 13:25), 9年前編輯推噓3(3010)
留言13則, 3人參與, 最新討論串1/1
大家好,最近應公司需求必須開發一個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

08/04 14:45, , 1F
你一直跑一個不會停止的迴圈,當然CPU狂衝啊...用
08/04 14:45, 1F

08/04 14:45, , 2F
NSTimer做吧
08/04 14:45, 2F
謝謝回應,但是主要測試程式必須用迴圈去跑...設置要跑一個晚上看機器結果 會有停止的迴圈但是時間很長,請問這樣也能用NSTimer去撰寫嗎?謝謝! ※ 編輯: aureolus (60.248.134.2), 08/04/2016 15:10:53

08/04 15:33, , 3F
你另外開的這個thread除了計算目前時間跟開始測試的時
08/04 15:33, 3F

08/04 15:34, , 4F
間差外,沒看到任何計算,這種需求完全不需要用迴圈去
08/04 15:34, 4F

08/04 15:34, , 5F
跑吧...
08/04 15:34, 5F
謝謝,時間只是其中一個部分,主要測試有非常多測試Function, 比方說連接USB port..連接訊號 斷開訊號送出...GPIB指令等等 測試會依照使用者設定LOOP多次設置產生LOG這樣,剛剛我將時間用NSTIMER 成功解決了這個問題非常感謝,但是主要測試程序目前看起來只能用執行緒去跑 爬了許多文章有看到NSThread下自動釋放池在迴圈中好像是無效的...持續研究中 謝謝! ※ 編輯: aureolus (60.248.134.2), 08/04/2016 15:49:00

08/04 18:20, , 6F
如果說做完一些動作後讓他睡個一秒呢
08/04 18:20, 6F

08/04 18:21, , 7F
[NSThread sleepForTimeInterval:1];
08/04 18:21, 7F

08/04 22:35, , 8F
Update UI的動作建議一定要在main thread做
08/04 22:35, 8F

08/04 22:36, , 9F
你這支程式如果把update timelabel那行dispatch到主線程去
08/04 22:36, 9F

08/04 22:37, , 10F
記憶體的上升速度就會明顯下降很多
08/04 22:37, 10F

08/04 22:40, , 11F
然後迴圈最好設個最小執行時間 執行時間小於該時間就sleep
08/04 22:40, 11F

08/04 22:41, , 12F
如果以會update UI的迴圈來說的話 就是1/60秒
08/04 22:41, 12F

08/04 22:44, , 13F
更新的比螢幕更新頻率還快的話也是看不到 沒什麼意義
08/04 22:44, 13F
非常感謝兩位的幫忙,Update UI要用dispatch我有深刻體驗了...非常感謝建議 加入後整個UI記憶體使用量下降非常多,現在都能控制整體在30~50m之間 睡個一秒這個我也試過了,但是對測試時間來說加太多反而會不能達到預期結果 CPU跟記憶體目前有明顯改善有下降了,不過還是會隨著程式跑越久迴圈疊加越多 這點還在持續研究記憶體洩漏的問題,感謝各位大力協助! ※ 編輯: aureolus (60.248.134.2), 08/05/2016 14:41:02
文章代碼(AID): #1Nej7TID (MacDev)
文章代碼(AID): #1Nej7TID (MacDev)