除了 Visual Studio 中的工具,您还知道哪些工具可以分析 Windows CE/Mobile 应用程序中的性能瓶颈?我正在寻找类似 AQTime for CE/Mobile 的东西,以分析编译为本机代码的 C/C++ 应用程序。
4 回答
Windows CE 支持开箱即用的Remote Call Profiler (如果 OEM 添加了对它的支持)。我相信,WinMo 图像通常已经在图像中支持它。对于 CE,您需要设置 IMAGEPROFILER 环境变量(使用项目属性)。
MSDN 中不清楚的是如何检测不是使用 Platform Builder 构建的应用程序,但它实际上非常简单。您必须将 /callcap 开关添加到编译器命令行并将 cecap.lib 添加到链接器设置。
当然,您需要一个工具来捕获和显示探查器数据。为此,您可以使用 Platform Builder 的评估版(5.0或6.0)(eval 是免费的)或eVC 4.0(也是免费的)。
有关分析器使用的更多信息,来自 CE 核心团队的 Sue Loh 已在博客中介绍了一些相关信息。
我还没有为 WindowsMobile 找到任何此类用于本机开发的工具。
我发现最接近的是 EnTrek 工具集(CodeSnitch / ProcMan),但它们并不是真正的分析工具。 http://www.entrek.com/products.htm
我们所做的是使用 VC++ 的 Vistual Studio "/callcap" 开关将自己的分析支持构建到我们自己的产品中。使用该开关,您可以构建一个分析库,该库可以输出时间和计数,无论您喜欢什么。它对我们来说效果很好,但有时这些钩子函数的开销可能太大,它可能会将计时结果倾斜到大量函数调用的区域。
来自 MSDN 文档:
/callcap 选项使编译器在每个函数的开头和结尾插入对分析挂钩的调用。
您必须在没有 callcap 开关的情况下编译分析挂钩。如果您使用 callcap 开关编译分析挂钩函数,这些函数将对它们自己执行无限递归调用。
以下代码示例 Callcaphooks.c 显示了一个分析挂钩函数 _CAP_Enter_Function,用于在没有 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;
}
我为 Windows Mobile 编写了一个调用图分析器。它目前(截至 2010 年 1 月)处于 Beta 阶段,可以免费下载。
高温高压
-扎克
如果您正在进行 .NET CF 开发,请查看Power Toys for .NET CF 3.5,了解可以帮助您查明瓶颈的实用程序,尤其是与内存相关的瓶颈。