黑马程序员技术交流社区
标题: NSLog比printf性能为什么差这么多 [打印本页]
作者: sabjiang 时间: 2014-4-26 23:08
标题: NSLog比printf性能为什么差这么多
本帖最后由 sabjiang 于 2014-4-29 12:09 编辑
- CFAbsoluteTime startNSLog=CFAbsoluteTimeGetCurrent();
- for (int i=0; i<10000; i++) {
- NSLog(@"%d",i);
- }
- CFAbsoluteTime endNSLog=CFAbsoluteTimeGetCurrent();
-
- CFAbsoluteTime startPrinft=CFAbsoluteTimeGetCurrent();
- for (int i=0; i<10000; i++) {
- printf("%d\n",i);
- }
- CFAbsoluteTime endPrintf=CFAbsoluteTimeGetCurrent();
- NSLog(@"NSLog time:%lf, printf time :%lf",endNSLog-startNSLog,endPrintf-startPrinft);
复制代码
用NSLog和printf分别答应10000条数据,统计两者的耗时,如下:NSLog time:2.005033, printf time :0.055691
请教大神分析下两者的区别,反正NSLog应该不是printf的封装,NSLog每次还会打印出系统自带的一些东东,能去掉吗
作者: Freedam 时间: 2014-4-26 23:17
NSLog比printf慢是应当的,因为NSLog不仅要在终端上显示打印信息还要将打印信息写进system.log日志中去,所以肯定会比只做打印输出的printf慢。
作者: 戴文婷 时间: 2014-4-26 23:27
NSLog比 printf 的功能多嘛。觉得,出了楼上说的日志功能外,应该还有。判断类,然后输出类的功能,肯定会加更加多的代码,执行的代码多。效率当然就低了
作者: 傘が咲く 时间: 2014-4-26 23:27
首先,到NSObjCRuntime.h中看到,NSLog的定义格式是:void NSLog(NSString *format, …);他是传递一个字符串对象,而printf()是c的函数,并没有对象的概念,这里效率不同,这是其一。
其次相对printf()来说NSLog()会自己加上换行符,NSLog()在Debug下会写到system.log中,NSLog()会自动加上时间和进程信息.
所以,你看到差别那么大。希望对你有帮助!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |