我编程时间不长,对哪种技术最快不熟悉,所以想知道是否有使用VS或第三方工具来完成这个任务的方法?
谢谢
我编程时间不长,对哪种技术最快不熟悉,所以想知道是否有使用VS或第三方工具来完成这个任务的方法?
谢谢
性能分析工具对于测量很有用。
但是你的问题是“如何确定代码的慢部分在哪里?”。
那是一个不同的问题。这是诊断,不是测量。
我知道这不是一种流行的观点,但这是真的。
就像一个试图削减成本的企业。
一种方法(自上而下)是测量整体财务状况,然后按类别和部门分解,并尝试猜测哪些可以被消除。那是测量。
另一种方法(自下而上)是随机走进一个办公室,随机挑选某个人,并详细询问他们当时正在做什么以及(重要的是)为什么。
多做几次这种方法。
这就是哈利·特鲁曼在第二次世界大战爆发时所做的事情,在美国国防工业中,他立即访问了几个地点,揭露了大规模的欺诈和浪费。那是诊断。
在代码中,您可以通过非常简单的方式来执行此操作:“暂停”它并问它为什么花费了特定的周期。通常,调用堆栈会详细告诉您原因。
多做几次这种方法。
这就是抽样。一些性能分析工具对调用堆栈进行抽样。但出于某种原因,他们坚持总结每个函数的时间,包括和不包括。那就像在企业中按部门或者不按部门总结一样。
它失去了你需要的信息,即细节信息,以判断周期是否必要。
回答你的问题:
只需多次暂停程序,并每次捕获调用堆栈。如果代码非常慢,则浪费的函数调用将出现在几乎每个堆栈上。它们将精确指向“你的代码的慢部分”。
添加:RedGate ANTS 已经取得了进展。它可以给你每一行代码的成本,而且非常炫酷。如果你使用 .NET,并且可以花费三位数的价格,也不介意等待安装和学习,那么它可以告诉你很多暂停键所不能告诉你的东西,并且呈现更加美观。
我用过ANTS Profiler,可以像其他用户一样推荐使用。
与它能省下的开发时间相比,价格微不足道。
如果你是一名职业开发者,而你的公司不愿为你购买,那么要么换一家公司,要么自己买。
如果你不想花钱,新版本的VS带有一个分析器,但老实说它看起来并不好用。ATI / AMD做了一个免费的分析器...但对我来说不是很用户友好(我无法从中获得任何有用的信息)。
我的建议是使用代码自己计时函数调用。如果它们很快,并且您没有高精度定时器,或者由于多种原因(例如每个x次调用构建某种缓存),调用速度变慢,请尝试运行每个函数x10000次或更多,然后相应地除以结果。这可能不适用于某些代码部分,但如果您无法找到一个好的,免费的第三方解决方案,那么除了付费之外,基本上就只剩下这个方法了。