CPU运行超过100%

时间:2014-02-16 14:23:49

标签: ios objective-c multithreading uicollectionview instruments

我正在寻找一些关于我的IOS应用程序中可能导致CPU问题的建议。

该应用程序将运行良好,然后一段时间后CPU将飙升并保持高位。我使用UICollectionView显示使用线程生成和编辑的水平缩略图。当我使用UICollectionView并滚动图像时,似乎会发生尖峰。

我已经发布了有问题的乐器截图,下面的代码是我用来编辑图像的。

enter image description here

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

                UIImage *imageWithEffect = [self editImage:[[self.activeEffectsArray objectAtIndex:index] objectAtIndex:0] ImageToEdit:self.thumbnailImage];

                dispatch_async(dispatch_get_main_queue(), ^{

                    [imageViewWithEffect setImage:imageWithEffect];
                    [activityIndicator removeFromSuperview];

                    [[self.activeEffectsArray objectAtIndex:index] insertObject:imageWithEffect atIndex:2];

                });

            });



- (UIImage *)editImage:(NSString *)effectName ImageToEdit:(UIImage *)tmpImage {

EffectBigApple *effectBigApple = [[EffectBigApple alloc] init];


if([effectName isEqualToString:@"BigApple 1"]){

    return [effectBigApple processImage:tmpImage filterType:@"BigApple 1" sliderValue:1 type:nil];

}
if([effectName isEqualToString:@"BigApple 2"]){

    return [effectBigApple processImage:tmpImage filterType:@"BigApple 2" sliderValue:1 type:nil];

}
if([effectName isEqualToString:@"BigApple 3"]){

    return [effectBigApple processImage:tmpImage filterType:@"BigApple 3" sliderValue:1 type:nil];

}
if([effectName isEqualToString:@"BigApple 4"]){

    return [effectBigApple processImage:tmpImage filterType:@"BigApple 4" sliderValue:1 type:nil];

}

return nil;
}

可能是造成它的另一部分代码,但我不确定?

1 个答案:

答案 0 :(得分:3)

您没有提供足够的信息来帮助您。

通常,在将新的表视图/集合视图单元格滚动到视图中时,您希望避免任何“繁重的工作”。您需要一种方案,您可以在其中显示占位符图像,将处理排入后台队列,并在完成后更新结果。

同样重要的是,您希望缓存结果,以便只处理每个图像一次。如果用户向下滚动,然后向后滚动,您应该在图像缓存中找到已经处理过的图像并使用它们。内存中缓存速度最快,但即使将处理后的映像缓存到磁盘也可能会显着提高速度。

当你开始一堆后台处理时你的CPU使用率非常高是非常正常的,并不一定是个问题。您只需要确保后台处理不会使用户界面滞后。假设您有一个很好的系统,可以将图像处理排队到后台队列,并在准备好后将缓存显示处理后的图像,您可能需要将处理队列的优先级回拨到下一个较低优先级DISPATCH_QUEUE_PRIORITY_LOW。这将提高用户交互的偏好,并减慢图像处理速度。

如果我没记错的话,CPU会使用最大100 x的设备核心数量。因此,如果您使用的是2核iPhone 4s,则最大CPU为200。