不同内存区域的耗时操作

来源:互联网 发布:原生js手风琴效果 编辑:程序博客网 时间:2024/06/06 09:30
  1. 空的for循环不耗性能,基本不耗时

    #pragma mark - 耗时操作- (void)longOperation{    // 性能测试:    double start = CACurrentMediaTime();    for (int i = 0; i < 1000000; i++) {        //循环内没有任操作    }    // 获取时间差值    NSLog(@"----:%f",CACurrentMediaTime() - start);}

    打印结果:2017-06-19 18:57:25.465 01-模拟耗时操作[95446:4223426] —-:0.002655

  2. 操作内存的栈区不耗性能,基本不耗时,因为地址是连续的,寻址简单

    #pragma mark - 耗时操作- (void)longOperation{    // 性能测试:    double start = CACurrentMediaTime();    for (int i = 0; i < 1000000; i++) {        //定义一个int类型 -- 该变量存放在内存的栈区        int abc = 10000000;    }    // 获取时间差值    NSLog(@"----:%f",CACurrentMediaTime() - start);}

    打印结果:2017-06-19 19:00:02.243 01-模拟耗时操作[95474:4224838] —-:0.002460

  3. 操作内存的常量区不耗性能,相对不耗时,但是相对栈区要耗性能一些,内存控件只开辟一次

    #pragma mark - 耗时操作- (void)longOperation{    // 性能测试:    double start = CACurrentMediaTime();    for (int i = 0; i < 1000000; i++) {        // 定义一个NSString字符串 -- 该变量存放在内存的常量区        NSString *str = @"aaaaaaaaaaaaaaaaaaaaaaaa";    }    // 获取时间差值    NSLog(@"----:%f",CACurrentMediaTime() - start);}

    打印结果:2017-06-19 19:03:57.907 01-模拟耗时操作[95515:4226915] —-:0.011038

  4. 操作内存的堆区,相对栈区和常量区要耗更多性能,因为堆区的地址是不连续的,需要耗费时间去寻址

    #pragma mark - 耗时操作- (void)longOperation{    // 性能测试:    double start = CACurrentMediaTime();    for (int i = 0; i < 1000000; i++) {        // 该变量存放在内存的堆区        NSString *str = [NSString stringWithFormat:@"test--%d",i];    }    // 获取时间差值    NSLog(@"----:%f",CACurrentMediaTime() - start);}

    打印结果:2017-06-19 19:17:28.997 01-模拟耗时操作[95598:4233527] —-:0.804514

  5. I/O操作是非常耗性能的

    #pragma mark - 耗时操作- (void)longOperation{    // 性能测试:    double start = CACurrentMediaTime();    for (int i = 0; i < 1000000; i++) {        // 打印非常耗时也就是耗时操作        NSLog(@"%d",i);    }    // 获取时间差值    NSLog(@"----:%f",CACurrentMediaTime() - start);}

    打印结果:2017-06-19 19:11:29.560 01-模拟耗时操作[95554:4229094] —-:176.182018

    耗时操作对UI交互影响:会卡死UI导致屏幕上的空间暂时无法执行操作

原创粉丝点击