除了Visual Studio中的工具外,您了解哪些工具来分析Windows CE / Mobile应用程序中的性能瓶颈?我正在寻找类似AQTime for CE / Mobile的东西,来分析编译为本机代码的C / C ++应用程序。
答案 0 :(得分:9)
Windows CE支持Remote Call Profiler(如果OEM添加了对它的支持)开箱即用。我相信,WinMo图像通常已经在图像中得到了支持。对于CE,您需要IMAGEPROFILER环境变量集(使用项目属性)。
MSDN中不清楚的是如何检测不是使用Platform Builder构建的应用程序,但它实际上非常简单。您必须将/ callcap swith添加到编译器命令行,并将cecap.lib添加到链接器设置。
当然,您需要一个工具来捕获和显示探查器数据。为此,您可以使用Platform Builder的评估版(5.0或6.0)(eval是免费的)或eVC 4.0(也是免费的)。
有关探查器使用情况的更多信息,来自CE核心团队的Sue Loh在博客上发表了一些博文。
答案 1 :(得分:5)
我还没有找到任何用于WindowsMobile的本地开发工具。
我发现最接近的是EnTrek工具集(CodeSnitch / ProcMan),但它们并不是真正的分析工具。 http://www.entrek.com/products.htm
我们所做的是使用VC ++的Vistual Studio“/ callcap”开关为我们自己的产品构建自己的分析支持。使用该开关,您可以构建一个分析库,无论您喜欢什么,都可以转储计时和计数。它对我们来说效果很好,但有时这些钩子函数的开销可能太大,它可能会将时序结果偏向大量函数调用的区域。
来自MSDN文档:
/ callcap选项导致 编译器插入对分析的调用 钩子在每个的开头和结尾 功能。
您必须编译分析钩子 没有callcap开关。如果你 编译分析钩子函数 使用callcap开关,功能 将执行无限递归调用 对自己。
以下代码示例, Callcaphooks.c显示了一个分析钩子 function,_CAP_Enter_Function,for 没有callcap的编译。
// File: callcaphooks.c
#include <stdio.h>
int main();
void _CAP_Enter_Function(void *p)
{
if (p != main)
printf("Enter function (at address %p) at %d\n",
p, GetTickCount());
return;
}
void _CAP_Exit_Function(void *p)
{
if (p != main)
printf("Leaving function (at address %p) at %d\n",
p, GetTickCount());
return;
}
答案 2 :(得分:3)
我为Windows Mobile编写了一个Call Graph探测器。它目前(截至2010年1月)处于测试阶段,可以免费下载。
HTH
-Zak
答案 3 :(得分:0)
如果您正在进行.NET CF开发,请查看Power Toys for .NET CF 3.5以获取可帮助您查明瓶颈的实用程序,尤其是与内存相关的瓶颈。