在我的應用程序中運行某段代碼時,我遇到了一些異常高的CPU使用率值。根據儀器,NSString
的rangeOfString:
方法導致此。我經常在各種for
循環中使用這種方法,因爲我真的必須這樣做。rangeOfString:CPU使用率高
我的問題是:我該如何解決這個問題?儀器可以告訴我問題出在哪裏,但是這個代碼是在一個單獨的框架中,所以這是有限的。即使我知道rangeOfString:
會導致它,但我不知道如何解決這個問題,以更多的CPU保留選擇。
這是導致這些問題的代碼:
- (NSArray *)resultStrings
{
NSMutableArray*_output = [[NSMutableArray alloc] init];
UsageHistory*_history = [[UsageHistory alloc] init];
NSHTTPCookieStorage*storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray*UsageHistoryArray = [[NSArray alloc] initWithArray:[_history usageHistory]];
NSArray*_storageCookies = [[NSArray alloc] initWithArray:[storage cookies]];
for (DAHistoryObject*object in UsageHistoryArray)
{
for (NSHTTPCookie*ck in _storageCookies)
{
@autoreleasepool
{
NSString*domain = [ck domain];
if ([[[ck domain] substringToIndex:1] isEqualToString:@"."])
{
domain = [[ck domain] stringByReplacingCharactersInRange:NSMakeRange(0, 1) withString:@""];
}
if ([[object url] rangeOfString:domain].location != NSNotFound)
{
NSHTTPCookie*cookie = [DAHTTPCookie createCookieWithURL:[ck domain] cookieName:[ck name] expires:[[ck expiresDate] timeIntervalSince1970] cookieValue:[ck value] browserType:DARavenBrowser secure:[ck isSecure]];
[_output addObject:cookie];
}
}
}
}
[UsageHistoryArray release];
[_storageCookies release];
[_history release];
return [_output autorelease];
}
你是對的 - 優化總是妥協,很好,你的想法提供了大約5-10%的小改進,但是仍然使我成爲93%ish – Pripyat
Theres still一個微妙的錯誤根據URL規範,域名不區分大小寫 – JeremyP