㈠ 什麼是編譯時間
用戶使用編譯程序對其個人編制的源程序進行編譯的過程稱為程序編譯。編譯時間(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>