这让我很吃惊,因为我一直以为loop
应该有一些内部优化.
这是我今天做的实验.我使用的是Microsoft Visual Studio 2010.我的操作系统是64位Windows 8.我的问题就在最后.
第一个实验:
平台:Win32
模式:调试(禁用优化)
begin = clock();
_asm
{
mov ecx, 07fffffffh
start:
loop start
}
end = clock();
cout<<"passed time: "<<double(end - begin)/CLOCKS_PER_SEC<<endl;
Run Code Online (Sandbox Code Playgroud)
输出:( passed time: 3.583
每次运行时,数字会略有变化,但在道德上大小相同.)
第二个实验:
平台:Win32
模式:调试
begin = clock();
_asm
{
mov ecx, 07fffffffh
start:
dec ecx
jnz start
}
end = clock();
cout<<"passed time: "<<double(end - begin)/CLOCKS_PER_SEC<<endl;
Run Code Online (Sandbox Code Playgroud)
输出: passed time: 0.903
第三和第四个实验:
只需将平台更改为x64即可.由于VC++不支持64位内联汇编,我必须将循环放在另一个*.asm
文件中.但最后结果是一样的.
从这一点开始,我开始使用我的大脑 - loop
比它慢4倍dec ecx, jnz start
,而它们之间唯一的区别,AFAIK,是dec ecx …
调用 时startActivity
,可以尝试捕获 anActivityNotFoundException
来了解活动是否存在。
然而打电话的时候startService
却没有ServiceNotFoundException
。如何检测该服务是否存在?
我为什么要这样做
据我所知,对的调用startService
将被异步处理,因此我想知道我是否应该期望来自服务的响应(例如回调或广播)。
到目前为止我做了什么
我搜索了一下并在这里找到了一个相关问题。看来内部有一个ClassNotFoundException
凸起。
是否可以在某处捕获此异常?这个Class.forName()
方法似乎不对……是吗?