㈠ 什么是编译时间
用户使用编译程序对其个人编制的源程序进行编译的过程称为程序编译。编译时间(compiling time) 指编译程序将源程序编译成目标程序所占用的时间。
1 如何减少编译时间
一是执行每日自动构建。每日自动构建的原理很简单:安装每日构建工具CCNET(不熟悉该工具的同学可以去搜索下)。然后在源码服务器上安装编译环境。源码服务器每天获取最新代码,每天下班后开始编译最新代码,经过一个晚上基本上就能把库和应用程序都编好,到了第二天开发人员只需下载最新的库文件和代码文件而不须自己重新编译。这样就能大大节省时间了。
二是使用联合编译器IncrediBuild。这个工具估计大家都不陌生。最近试验了一个新想法,写一个批处理文件,将SVN和IncrediBuild绑在一起,实现了从源码更新到工程编译。
2 批处理文件的命令语法
svnupinclude//更新服务器的include文件夹到本地
BuildConsoleD:\Code\MySolution.sln/prj="MyApp"/build/OpenMonitor/cfg="Debug|Win32"
BuildConsole是IncrediBuild的命令行工具,
D:\Code\MySolution.sln是你的解决方案文件绝对路径,
/prj参数设置你要编译的工程,如果你要编译多个工程,可以这样设置,/prj="prj1,prj2,prj3",
/prj参数也支持通配符,/prj="*"即为编译MySolution.sln下的所有工程
/build为编译工程,若改为/rebuild即是清理重编工程。
/OpenMonitor为打开IncrediBuild的图形化界面,去掉该参数则不出现图形界面。
/cfg为编译设置选项,如要编release版本,可以改为Release|Win32。
把上面的代码保存为BuildDebug.bat,把文件保存在D:\Code\路径下(即源码根目录,下面有include、src和vs三个文件夹),然后运行这个批处理文件就相当于把从更新源码到编译源码这一系列动作都执行了。
㈡ Xcode 构建速度优化(一)衡量编译时间
随着项目不断迭代,工程文件越来越多,引用的三方库也越来越多,这些直接导致编译时间的不断增加,完整编译一次项目动辄需要五分钟以上时间,实在有些影响开发效率,是时候来一波提速了。
为编译和构建提速,首先我们需要对速度有一个衡量标准:准确获得构建用时
首先,我们需要定义要衡量和优化的内容。 有两种选择:
xcode默认情况下会跟踪所有构建,我们可以通过更改xcode相关设置,来在活动查看器中显示出构建时间,通过命令行:
每次编译成功后,会在Successed之后显示出所用时间:
Xcode Build Timing Summary是Xcode10中加入的用于查看获取构建时间和发现用时瓶颈方面的最有利工具。 可以通过Proct->Perform Action->Build With Timing Summary来开启:这样在 Build Log 的末尾就会添加 Timing Summary Log。我们可以通过这个 log 看到哪个阶段是耗时的,便于我们进行优化。
如上图中: xib阶段的编译耗时明显是比普通c文件要多的,意味着我们可以通过减少xib方式来优化提升速度
而c文件的编译用时比总时间还要长,是因为c文件是并行编译的
在命令行中同样可以开启这个功能:
常用的第三方工具有 BuildTimeAnalyzer 、 xcode-build-times-rendering 、 XCLogParser 。
BuildTimeAnalyzer可以统计可以得出某个文件的类型检查时长,每个表达式的类型检查时长。
xcode-build-times-rendering是一个Ruby编写的第三方工具,可以方便地分别测量目标的构建时间并在图表上显示它们,使用gem安装
接下来使用这个工具自带命令配置项目
然后构建项目并生成报告:
这个工具使用上比较简单,缺点是只能从宏观上生成各个target编译的整体图标,无法详细列出各个内部编译明细
XCLogParser可以详细列出各个Target和内部每个文件的编译耗时,对我们分析编译时间瓶颈非常有帮助,它的工作原理主要是做为解析器,通过解析xcode编译生成的xcactivitylog日志来记录
安装:
编译项目后,进行安装
安装成功后通过命令:
会自动在当前目录的 build/xclogparser/reports/ 路径下生成报告,其中--project参数需要设置为待分析项目的名字,并注意当前在终端切换到希望写入日志的目录。
报告截图:
这个工具将作为我们后面分析提升编译构建速度的主要使用工具。
经过我多次在不同时间段,不同电脑上不断尝试编译,
我发现编译耗时是一个比较玄的东西,及时在同一台电脑,同一个项目, 同一套环境配置下,编译用时也会随着电脑当前状态(包括同时打开进程、散热等等)上下大幅跳动,就像算法时间复杂度一样,有时候我们明明做了一些细微的优化,但是结果反而是编译耗时增加了,这是很正常的事情
所以,衡量这个标准需要我们取多次试验中的平均值作为参考。
㈢ 我应该买什么PC来获取Quartus II的最快速编译时间
最后修改: 2012 年9 月05 日
产品类别: 设计软件
产品领域: 安装/授权(设计软件)
产品子领域: 操作系统支持/系统要求
标题说明Altera为Quartus03 II 只推荐最低硬件要求,最低可用物理RAM,和交换空间。这些推荐是在载有Quartus II的readme.txt格式中和在器件支持版本注释中,存在于Quartus II Development Software documentation page最低要求使Quartus II 能够运行。如果您具有大的设计和想要最佳编译时间,Altera建议更高的配置。 Quartus II需要大量的处理器和存储器资源。CPU速度是影响编译次数性能的主要因素。请考虑多核处理器和多CPU的配置,从而利用多线程编译。使用分化快设计和增量式编译来完全利用可用内核。请参考 Quartus II手册的第二卷的Recing Compilation Time章节。除此之外,解决以下三个瓶颈:通过处理器最大化芯片上的缓存访问最小化虚拟储存器的使用最小化硬盘访问时间通过处理器最大化芯片上的缓存访问选择具有大量的芯片上缓存的CPU。最小化虚拟储存的使用使用64-位体系结构和操作系统,伴随足够量的快速速度等级RAM。随着器件大小和软件复杂性的增长,内存使用也在增加。针对较新的器件系列(Stratix03 III 和更新的版本)的设计比用于32位应用的RAM的2GB需要更多,所以使用64位操作系统和软件。对于一个64位系统,对于更大的器件系列,一个单编译应该已经访问至少RAM的8GB (安装8到10GB)和更多。对于每种器件的最低安装的RAM信息,请参考器件支持版本注释,存在于Quartus II Development Software documentation page。最短的硬盘访问时间使用快速或固态硬盘安装一个本地SCSI或基于SATA的体系结构。磁盘也可以被RAID条带化,以便更快的访问。 使用网络磁盘可以是编译时间的一个显着地瓶颈。如果您必须在网络硬盘上存储工程源,Altera建议使用网络文件系统的源文件创建一个本地工程,保持项目目录当地和源文件远程。Quartus II 只读取几次源文件,但是需要访问Quartus II数据库(db and incremental_db)很多次。补充注释从32位转换到64位 OS并且软件可能不会减少编译时间。64位Quartus II使能够访问每进程较大的储存映射(没有2GB限制),但是使用64位OS或软件时可能看不到提高,如果我们的设计没有达到2GB限制并且在32位OS上使用低虚拟储存。您可能看到编译次数的稍微降低,由于64位进程的较多开销。Quartus II 10.0的编译次数性能和更新的64位对比32位(64位机上)是可比较的,如同Windows OS的性能对比相等的Linux (32位对比32位,或者64位对比64位)。
㈣ c#中如何将记录项目的最后编译时间
可以用以下语句来获得最后编译时间。
System.IO.File.GetLastWriteTime(this.GetType().Assembly.Location)
原来在C++中,有个__DATE__,__TIME__,__FILE__,__LINE__这样的异性宏定义可以使用,但是在C#中,不能使用
㈤ html网页怎样获取服务器的时间
网页前端是无法获取到服务器时间的,只有通过后台取值然后进行传递。 使用Ajax每秒获取服务器的时间并显示出来,但是服务器网络延迟较高,这样误差较大。
示例采用Head的方法处理,第一次页面加载时从服务器端获得时间,以这个时间为基准,客户端再用js每秒累加。
完整代理示例:
<html>
<head>
<title>html网页获取服务器的时间</title>
<scriptlanguage="javaScript"type="text/javascript">
<!--程序执行需要耗费时间,误差在2秒以下-->
varxmlHttp=false;
<!--获取服务器时间-->
try{
xmlHttp=newActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
xmlHttp=newActiveXObject("Microsoft.XMLHTTP");
}catch(e2){
xmlHttp=false;
}
}
if(!xmlHttp&&typeofXMLHttpRequest!='undefined'){
xmlHttp=newXMLHttpRequest();
}
xmlHttp.open("GET","
,false);
xmlHttp.setRequestHeader("Range","bytes=-1");
xmlHttp.send(null);
severtime=newDate(xmlHttp.getResponseHeader("Date"));
<!--获取服务器日期-->
varyear=severtime.getFullYear();
varmonth=severtime.getMonth()+1;
vardate=severtime.getDate();
<!--获取服务器时间-->
varhour=severtime.getHours();
varminu=severtime.getMinutes();
varseco=severtime.getSeconds();
<!--格式化输出服务器时间-->
functiongetSeverTime(){
seco++;
if(seco==60){
minu+=1;
seco=0;
}
if(minu==60){
hour+=1;
minu=0;
}
if(hour==24){
date+=1;
hour=0;
}
<!--日期处理-->
if(month==1||month==3||month==5||month==7
||month==8||month==10||month==12)
{
if(date==32)
{
date=1;
month+=1;
}
}elseif(month==4||month==6||month==9||month==11){
if(date==31){
date=1;
month+=1;
}
}elseif(month==2){
if(year%4==0&&year%100!=0){<!--闰年处理-->
if(date==29){
date=1;
month+=1;
}
}else{
if(date==28){
date=1;
month+=1;
}
}
}
if(month==13){
year+=1;
month=1;
}
sseco=addZero(seco);
sminu=addZero(minu);
shour=addZero(hour);
sdate=addZero(date);
smonth=addZero(month);
syear=year;
innerdata="当前服务器时间:";
document.getElementById("servertime").innerHTML=innerdata+syear+"-"+smonth+"-"+sdate+""+shour+":"+sminu+":"+sseco;
setTimeout("getSeverTime()",1000);
setTimeout("getClientTime()",100);
}
functionaddZero(num){
num=Math.floor(num);
return((num<=9)?("0"+num):num);
}
</script>
</head>
<bodyonLoad="getSeverTime();">
<pid="servertime"></p>
<pid="clienttime"></p>
<pid="xctime"></p>
</body>
</html>
【扩展】网页前端获取当前时间,调用date()函数即可。
示例代码:
<spanid="cg"></span>
<script>setInterval("cg.innerHTML=newDate().toLocaleString()",1000);</script>
㈥ js如何取得服务器时间
如果是网页前端的js是无法直接获得服务器时间的。只能借助一些服务器端语言,比如PHP,JSP,ASP等。方法是在服务器端获取服务器时间,然后输出一条js的幅值语句。
<script>
varserverTime=<%=Now()%>
alert(serverTime)
<script>