Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为了达到优化目的,我如何分析在Objective-C/Cocoa中执行一段代码所需的时间_Objective C_Cocoa_Optimization - Fatal编程技术网

为了达到优化目的,我如何分析在Objective-C/Cocoa中执行一段代码所需的时间

为了达到优化目的,我如何分析在Objective-C/Cocoa中执行一段代码所需的时间,objective-c,cocoa,optimization,Objective C,Cocoa,Optimization,假设我有两段可互换的代码,我想找出其中哪一段执行的处理器时间更短。我该怎么做 为了得到一个非常粗略的估计,我可以将NSLog()调用放在我想要分析的代码的任一侧,但似乎处理器非常繁忙会使结果产生偏差。除非这两段代码中的一段已经在你的应用程序中,和您已经分析了应用程序的总体性能,以确定现有代码是一个主要瓶颈,那么您所做的就是所谓的“过早优化” Xcode包含一个名为“.”的优秀工具,对于某些版本,可以在/Developer/Applications中找到它;对于其他人,它位于“性能工具”子目录中

假设我有两段可互换的代码,我想找出其中哪一段执行的处理器时间更短。我该怎么做


为了得到一个非常粗略的估计,我可以将NSLog()调用放在我想要分析的代码的任一侧,但似乎处理器非常繁忙会使结果产生偏差。

除非这两段代码中的一段已经在你的应用程序中,您已经分析了应用程序的总体性能,以确定现有代码是一个主要瓶颈,那么您所做的就是所谓的“过早优化”

Xcode包含一个名为“.”的优秀工具,对于某些版本,可以在/Developer/Applications中找到它;对于其他人,它位于“性能工具”子目录中

Shark将告诉您应用程序在代码的每个部分花费的时间(占总执行时间的百分比)。使用Shark这样的工具是为了遵循“80/20规则”——你的应用程序将花费80%的时间运行20%的代码,因此为了获得最佳效果,你应该花费80%的时间优化这20%


因此,为了直接回答您的问题,假设您运行了Shark,并且希望优化最重要的瓶颈,只需将其替换为优化的代码,然后再次在Shark下运行应用程序即可。然后,比较替换代码和原始代码花费的总时间百分比。

除非这两段代码中的一段已经在你的应用程序中,并且你已经分析了你的应用程序的总体性能,以确定现有代码是一个主要瓶颈,那么你所做的就是“过早优化。”

Xcode包含一个名为“.”的优秀工具。对于某些版本,它位于/Developer/Applications中;对于其他版本,它位于“Performance Tools”子目录中

Shark会告诉你你的应用程序在代码的每一部分花费了多少时间(占总执行时间的百分比)。使用Shark这样的工具是为了遵循“80/20规则”“-你的应用程序将花费80%的时间运行20%的代码,因此为了获得最佳效果,你应该花费80%的时间优化同样的20%

因此,为了直接回答您的问题,假设您运行了Shark,并且希望优化最重要的瓶颈,只需将其替换为优化的代码,然后再次在Shark下运行应用程序即可。然后,比较替换代码和原始代码花费的总时间百分比。

Woo shark,耶。另见。基本上,从shark中的菜单中选择
采样>编程(远程)
,然后调用chudStartRemotePerfMonitor和chudStartRemotePerfMonitor(),其中包含要评测的特定代码

除此之外,我还保留了一段用于计时的代码

首先是用法

uint64_t startTime, stopTime;
startTime = mach_absolute_time();

< work to time goes here >

stopTime = mach_absolute_time();
logMachTime_withIdentifier_(stopTime - startTime, @"10000000 class messages");
哇,鲨鱼,耶。另见。基本上,从shark中的菜单中选择
采样>编程(远程)
,然后调用chudStartRemotePerfMonitor和chudStartRemotePerfMonitor(),其中包含要评测的特定代码

除此之外,我还保留了一段用于计时的代码

首先是用法

uint64_t startTime, stopTime;
startTime = mach_absolute_time();

< work to time goes here >

stopTime = mach_absolute_time();
logMachTime_withIdentifier_(stopTime - startTime, @"10000000 class messages");

假设您想评测整个应用程序(而不仅仅是一段代码),并且您的应用程序是用C/C++/Objective-C编写的(不是,例如Ruby),并且您使用的是Xcode 3.0或更高版本,那么您还应该查看Instruments应用程序。“采样器”仪器将为您提供与Shark非常相似的信息(尽管没有Shark关于提高性能的有时非常有用的提示)。此外,您还可以跟踪其他资源利用率(GC、核心数据、网络、磁盘I/O等),这些资源利用率可能比代码效率更重要,这取决于应用程序。仪器还可以利用OS X 10.5中的DTrace支持(
man DTrace
)。您可以使用DTrace编写自己的工具来更具体地监控应用程序(例如,调用一个或多个方法)


正如您所怀疑的那样,使用
NSLog
是一个坏主意,因为它可能会使用苹果系统日志系统。将日志写入asl时存在不确定性延迟,它会显示在控制台中。我不确定时间戳是什么时候设置的。

假设您想评测整个应用程序(不仅仅是一段代码),并且您的应用程序是用C/C++/Objective-C编写的(不是,例如Ruby),并且您使用的是Xcode 3.0或更高版本,那么您还应该查看Instruments应用程序。“采样器”仪器将为您提供与Shark非常相似的信息(尽管没有Shark关于提高性能的有时非常有用的提示)。此外,您还可以跟踪其他资源利用率(GC、核心数据、网络、磁盘I/O等),这些资源利用率可能比代码效率更重要,这取决于应用程序。仪器还可以利用OS X 10.5中的DTrace支持(
man DTrace
)。您可以使用DTrace编写自己的工具来更具体地监控应用程序(例如,调用一个或多个方法)


正如您所怀疑的那样,使用
NSLog
是一个坏主意,因为它可能会使用苹果系统日志系统。将日志写入asl时存在不确定性延迟,它会显示在控制台中。我不确定时间戳是什么时候设置的。

一定要使用shark——它是您一直想要的性能工具,也是您最终拥有的性能工具。Sherm链接到用户指南。一定要经历。TechNote2086是另一个很好的参考资料:一定要使用shark——它是您一直想要的性能工具,也是您最终拥有的工具。Sherm链接到用户指南。一定要经历。技术说明2086为ano