编程过程中,经常需要评估哪一部分代码比较耗费时间,这对于优化代码非常重要。Visual Studio中的profile功能可以评测,Matlab同样也有这个功能,而且使用起来也比较简单。
-基本命令
profile on : 开启profile
profile off: 关闭profile
profile clear: 清空历史数据
profile viewer: 查看profile 结果
-示例1
引自Matlab 中帮助文档:
<code class="language-plain hljs matlab has-numbering">profile on <span class="hljs-comment">% 开启 profile</span> plot(<span class="hljs-built_in">magic</span>(<span class="hljs-number">35</span>)) <span class="hljs-comment">% 绘制magic矩阵</span> profile viewer <span class="hljs-comment">% 查看profile结果</span> p = profile(<span class="hljs-string">'info'</span>); profsave(p,<span class="hljs-string">'profile_results'</span>) <span class="hljs-comment">% 保存profile 结果</span></code><ul class="pre-numbering" style="display: block;"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li></ul>
profile结果为:
这个结果一目了然,各函数所占用时间、调用次数、整体分布情况一目了然,这里不再多做解释。
-示例2
在使用过程中,我更喜欢在workspace中输入profile view命令,调出profile查看窗口,然后直接运行要测试的程序:
在“运行此代码”的文本框中输入要运行的程序名字,即可得到结果。
我要运行的代码名称为:TestAviReader.m,是一段读取和显示数据视频的简单文件。
<code class="hljs scilab has-numbering">xyloObj = VideoReader(<span class="hljs-string">'test.avi'</span>); nFrames = <span class="hljs-transposed_variable">xyloObj.</span>NumberOfFrames; vidHeight = <span class="hljs-transposed_variable">xyloObj.</span>Height; vidWidth = <span class="hljs-transposed_variable">xyloObj.</span>Width; fh = figure(<span class="hljs-string">'Name'</span>, <span class="hljs-string">'Dataset Checking'</span>); ah = axes(<span class="hljs-string">'parent'</span>, fh); <span class="hljs-keyword">for</span> k = <span class="hljs-number">1</span> : nFrames img = read(xyloObj,k); <span class="hljs-built_in">disp</span>(<span class="hljs-string">'当前播帧数:'</span>),<span class="hljs-built_in">disp</span>(k); imshow(img, <span class="hljs-string">'Parent'</span>, ah); <span class="hljs-keyword">pause</span>(<span class="hljs-number">0.001</span>) <span class="hljs-keyword">end</span></code><ul class="pre-numbering" style="display: block;"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li></ul>
最终的profile结果为:
从结果来看,运行基本时间主要在imshow上。