锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 1.鍔犺澆Excel錛堣鍙杄xcel鍐呭錛夋槸榪斿洖鍊兼槸涓涓狣ataSet //鍔犺澆Excel OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn); public static bool SaveDataTableToExcel(System.Data.DataTable excelTable, string filePath) int size = excelTable.Columns.Count; 嬈㈣繋鏀惰棌鏈枃 涓璧瘋緗?銆怌# 鍐欏叆excel鍙婅鍙朎xcel瀹炰緥 http://www.1qidu.com/?action-viewnews-itemid-31870銆?br>涓璧瘋緗戝弬鑰冨湴鍧錛?a >http://www.1qidu.com/?action-viewnews-itemid-31870
]]>
銆銆鏂規硶錛氬鎵句簺紼嶅井鐭ュ悕鐨凚2C緗戠珯鍚堜綔妯″紡錛堢洰鏍囩敤鎴風浉鍚岋紝緇忚惀浜у搧涓嶅悓錛?鎶婂悇绔欏晢鍝佽仈鍚堣繍浣滆搗鏉ュ仛淇冮攢榪欏彲浠ュ仛鍒版兂涓嶅埌鐨勭粨鏋?澶氬瀵繪壘涓浜涘彲浠ュ彇鍏墮暱鐨勪紒涓氭垨鍟嗗,姣斿鎽勫獎涔︾睄涓撳崠鍜屾暟鐮佺浉鏈轟笓鍗栧簵鍚堜綔錛屾暟鐮佺被B2C涓庡搴秷璐圭被緗戠珯鐨勫悎浣滅瓑銆傚湪褰兼鐨勯〉闈㈡寕涓婂鏂圭殑鎺ㄨ崘鍟嗗搧錛涗篃鍙互鎺ㄥ嚭濂楅銆?br>銆銆濡備互涓嬬殑涓涓椿鍔細
銆銆浠嶺X騫碭X鏈圶X鏃ユ湡鑷砐X騫碭X鏈圶X鏃?鍑℃槸鍙鍦ㄦ湰绔欒喘涔頒換鎰忎竴閮ㄧ瑪璁版湰鐢佃剳鍔?0鍏冮佸嵆鍙幏寰椼?**璐墿緗戙戞彁渚涚殑鑻規灉鐗岀Щ鍔ㄧ‖鐩樹竴涓?!!!
銆銆鍦ㄦ,鎵捐仈鍚堜績淇忓晢鍝佺殑緗戠珯鍙互鏄崟鍚戠殑錛屽氨鏄綘瀵繪壘鐨勮喘鐗╃綉錛岃瀹冧績閿浣犱滑鐨勫晢鍝侊紝鑰屼綘涓嶄竴瀹氳涓婁粬浠殑鍟嗗搧銆傚弽涔嬶紝濡傛灉鏄崟鍚戠殑錛岄偅涔堜綘瑕佹壘鐨勫悎浣滃璞¤仈鍚堟帹鍑虹殑鍟嗗搧涓瀹氳瀹冭嚜宸辯殑鍟嗗搧鐨勫崟浠鋒瘮浣犵殑楂樸?br>銆銆瀛︿範鐐癸細鑱斿悎淇冮攢鐨勭洰鐨勬槸閿鍞晢鍝併佷紶鎾彛紕戜笌鍚稿紩鍏蟲敞搴︼紙闈炴祦閲忥級銆傚彧瑕佹湁涓涓洰鐨勫仛鎴愬嵆鍙?褰撶劧榪欑湅涓漢,濡傛灉鍙互涓ゆ牱閮藉緱鎵?浣犱竴瀹氫細鏈夋墍鏀惰幏.
銆銆浜屻佽禒鍝佹椿鍔?br>銆銆鏂規硶錛氭綾繪椿鍔?a ,鍙戦挶鐨勯噸瑕佹妧宸э紝涓庢煇浜涜鍧涖佺ぞ鍖哄悎浣溿佸崥瀹紝鍙戝灝戠瘒璐村瓙鎴栬川閲忚創澶氬皯錛岀粰澶氬皯鎴戠珯鐨勪唬閲戝埜絳夌瓑錛屽悓鏃訛紝濂藉弸閲嶈鐨勫氨鏄竴瀹氳璁╃涓夋柟緗戠珯褰㈠紡瑙勫緥鎻愰啋鐢ㄦ埛棰嗕唬閲戝埜銆傚彲浠ユ瘡鍛ㄦ垨鏈堝湪絎笁鏂圭綉绔欏叕甯冧唬閲戝埜鐢ㄦ埛鍚嶅崟錛屽茍褰曞叆鏁版嵁搴擄紝鐩存帴鐢熸垚鎴戜滑鐨勭敤鎴峰茍鎵撳叆鐢ㄦ埛璐︽埛閲屼唬閲戝埜銆傚湪榪欑偣涓婄殑浣滄硶鍙互浣滄寲鎺樼殑瑕佽繙榪滄瘮褰撳綋鎻愪緵鐨勫寰堝銆?br>銆銆娉ㄦ剰鐐癸細涓庣涓夋柟緗戠珯鐨勬帴鍙d笌鏁版嵁鍙婃椂瀵規帴鏇存柊鏄緢閲嶈鐨勩?br>銆銆鍥涖佹敞鍐屾湁濂?br>銆銆浣滄硶錛氭敞鍐屽氨鏈夊錛屽艦寮忓彲浠ユ槸瀹炵墿涔熷彲浠ユ槸浠i噾鍒革紝鍙互璁劇疆絳夌駭錛屾洿鍙互璁劇疆澶у銆傚鏋滄槸浠i噾鍒革紝鍙互鐩存帴鍦ㄧ敤鎴鋒敞鍐屽悗鎵撳叆鐢ㄦ埛鐨勫笎鎴蜂腑錛岀敤鎴峰彲浠ョ洿鎺ュ湪娑堣垂鏃朵嬌鐢ㄣ?br>銆銆娉ㄦ剰鐐癸細鏈変漢鑾峰緱浜嗗ぇ濂栧悗涓瀹氳澶у姏瀹d紶錛岄犲娍騫剁倰浣溿?br>銆銆浜斻佽鍧涙帹閫?br>銆銆浣滄硶錛氱浉鍏蟲х殑璁哄潧閲屽彂鍏泭鎬х殑璐村瓙騫剁淮鎶や笉浣垮叾涓嬫矇錛屼篃鍙彂鏌愪竴鎴戜滑鎯抽噸鐐規帹鐨勫晢鍝佺殑鍏泭鎬т俊鎭紝榪欏鍙g浼犳挱涓庡叧浣忓害鐨勬彁鍗囨槸寰堝ソ寰堝揩鎹風殑鏂規硶銆?br>銆銆娉ㄦ剰鐐癸細
銆銆1.涓瀹氳宸у浣撶幇浣犵殑緗戠珯鍙婂搧鐗屻?br>銆銆2.璐村瓙鐨勬爣棰樹竴瀹氳鏈夊惛寮曞姏銆?br>銆銆3.娉ㄦ剰鍥炶創錛屼繚鎸佽創瀛愮殑媧誨姏涓庡鍛斤紝騫朵嬌鍏跺嚭鐜板湪絎竴欏點?br>銆銆4. 涓涓創瀛愰?0涓乏鍙崇殑璁哄潧紺懼氨鍙戦佸茍緇存姢灝卞彲浠ヤ簡銆?br>銆銆鍏佷笓棰樻帹騫?br>銆銆浣滄硶錛氫笓闂ㄥ氨鏌愪駭鍝佹煇鍝佺墝鏀墮泦澶ч噺鍦版枃绔狅紝鍙互鍦ㄨ嚜宸辯殑绔欎笂鐨勮祫璁噷澶╁ぉ鏇存柊鍗佺瘒宸﹀彸錛涘悓鏃訛紝鍙互鍦ㄩ夊拰璁乼echweb絳?涓箣鍐呯殑鍗氬寮榪欐牱鐨勪笓棰樺崥瀹€傛瘮濡?#8220;濡備綍閫夎喘鏁扮爜鐩告満”鍗氬銆?br>銆銆娉ㄦ剰鐐癸細
銆銆1.涓庤鍧涙帹閫佺浉鍙嶏紝榪欓噷瑕佹眰鏂囩珷鏁伴噺澶氾紝鍙戦佺殑騫沖彴鍊掑彲浠ュ皯鐐癸紝鍙斁鍦ㄨ嚜宸辯綉绔欎笂涔熸槸鍙互鐨勩?br>銆銆2.濡傛灉浠庡埆鐨勭綉绔欐憳褰曠殑鏂囩珷錛屼竴瀹氳鏀規敼澶存崲鎵鵑潰銆?br>銆銆3.鏂囩珷涓鍔犲叆鑷繁緗戠珯鏍囪瘑鐨勫瓧鐪?br>銆銆4.鏂囩珷瑕佸閲嶅闇瑕佺獊鐜扮殑鍟嗗搧鎴栧搧鐗屽悕瀛椼?br>銆銆涓冦佷富棰樻椿鍔?br>銆銆浣滄硶錛氭垜鏂瑰崟鐙垨鑱斿悎鎴栬禐鍔╃涓夋柟榪涜媧誨姩錛屾瘮濡傛暟鐮佺綉绔欏彲浠ユ悶“鍦扮悆鏉戯紝鎴戜滑鐨勭敓媧葷┖闂淬?澶у鐢熸憚褰卞睍”錛屼互鍚稿紩浜烘皵錛屼紶閫掑搧鐗屼負涓匯備篃鍙互璧峰埌淇冮攢鐨勭洰鐨勩?br>銆銆娉ㄦ剰鐐癸細
銆銆1. 媧誨姩涓婚鍙婂歡灞曚竴瀹氳涓庢墍緇忚惀鐨勪駭鍝佺浉鍏熾?br>銆銆2.媧誨姩鐨勪漢緹よ涓庣洰鏍囧鎴風浉鍚屻傛瘮濡傛暟鐮佺綉绔欏鏋滄悶涓涓皬瀛︾敓浣滄枃澶ц禌灝卞け鍘諱簡鎰忎箟錛屽綋鐒朵篃璧蜂笉鍒版晥鏋溿?br>銆銆鍏佸弬涓庢椿鍔?br>銆銆浣滄硶錛氬弬涓庡埌絎笁鏂逛婦鍔炵殑媧誨姩涓幓錛屽寘鎷煇緗戠珯鐨勬椿鍔紝鏌愪簺浼氳錛屾煇浜涗細灞曠瓑絳夈傚艦寮忎笂鍙互鏄椿鍔ㄨ禐鍔╁崟浣嶃佸閲戞彁渚涘晢銆佹姤鍚嶇綉绔欑瓑絳夈?br>銆銆娉ㄦ剰鐐癸細
銆銆1. 瀵圭涓夋柟涓懼姙鐨勬椿鍔ㄤ竴瀹氳娉ㄦ剰媧誨姩鐨勫璞′笌鎴戜滑鐨勭洰鏍囧鎴風兢浣撴槸鍚﹂檮鍚堬紙涓鍐嶉噸澶嶈繖鐐癸紝鏄洜涓虹數瀛愬晢鍔$綉绔欎笉鍙互浣滃ぇ鑰岀┖鐨勭倰浣滐紝涓鍒囧姩浣滈兘鏄負澧炲姞鐢ㄦ埛錛岃繘鑰屽鍔犻攢閲忥紝榪欎笌鍒殑緗戠珯錛岀壒鍒槸閭d簺姹傛祦閲忕殑緗戠珯鏍規湰涓婃槸涓嶄竴鏍鳳級
銆銆2. 涓瀹氳娉ㄦ剰璐圭敤錛屼簤鍙栦笉鑺遍挶鎴栬姳灝藉彲鑳藉皯鐨勯挶璧峰埌鏈澶х殑褰卞搷
銆銆3. 濡傛灉鑳戒笌浼氾紝鏈濂戒篃鍙備笌榪涘幓銆?br>
]]>
public static DataSet LoadDataFromExcel(string filePath)
{
try
{
string strConn;
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";
OleDbConnection OleConn = new OleDbConnection(strConn);
OleConn.Open();
String sql = "SELECT * FROM [Sheet1$]";//鍙槸鏇存敼Sheet鍚嶇О錛屾瘮濡俿heet2錛岀瓑絳?
DataSet OleDsExcle = new DataSet();
OleDaExcel.Fill(OleDsExcle, "Sheet1");
OleConn.Close();
return OleDsExcle;
}
catch (Exception err)
{
MessageBox.Show("鏁版嵁緇戝畾Excel澶辮觸!澶辮觸鍘熷洜錛? + err.Message, "鎻愮ず淇℃伅",
MessageBoxButtons.OK, MessageBoxIcon.Information);
return null;
}
}
2.鍐欏叆Excel鍐呭錛屽弬鏁幫細excelTable鏄瀵煎叆excel鐨勪竴涓猼able琛?< type="text/JavaScript"> alimama_pid="mm_10249644_1605763_5027492"; alimama_type="f"; alimama_sizecode ="tl_1x5_8"; alimama_fontsize=12; alimama_bordercolor="FFFFFF"; alimama_bgcolor="FFFFFF"; alimama_titlecolor="0000FF"; alimama_underline=0; alimama_height=22; alimama_width=0; < src="
{
Microsoft.Office.Interop.Excel.Application app =
new Microsoft.Office.Interop.Excel.ApplicationClass();
try
{
app.Visible = false;
Workbook wBook = app.Workbooks.Add(true);
Worksheet wSheet = wBook.Worksheets[1] as Worksheet;
if (excelTable.Rows.Count > 0)
{
int row = 0;
row = excelTable.Rows.Count;
int col = excelTable.Columns.Count;
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
string str = excelTable.Rows[i][j].ToString();
wSheet.Cells[i + 2, j + 1] = str;
}
}
}
for (int i = 0; i < size; i++)
{
wSheet.Cells[1, 1 + i] = excelTable.Columns[i].ColumnName;
}
//璁劇疆紱佹寮瑰嚭淇濆瓨鍜岃鐩栫殑璇㈤棶鎻愮ず妗?C# 鍐欏叆excel鍙婅鍙朎xcel瀹炰緥
app.DisplayAlerts = false;
app.AlertBeforeOverwriting = false;
//淇濆瓨宸ヤ綔綈?< type="text/JavaScript"> alimama_pid="mm_10249644_1605763_5027492"; alimama_type="f"; alimama_sizecode ="tl_1x5_8"; alimama_fontsize=12; alimama_bordercolor="FFFFFF"; alimama_bgcolor="FFFFFF"; alimama_titlecolor="0000FF"; alimama_underline=0; alimama_height=22; alimama_width=0; < src=" wBook.Save();
//淇濆瓨excel鏂囦歡
app.Save(filePath);
app.SaveWorkspace(filePath);
app.Quit();
app = null;
return true;
}
catch (Exception err)
{
MessageBox.Show("瀵煎嚭Excel鍑洪敊錛侀敊璇師鍥狅細" + err.Message, "鎻愮ず淇℃伅",
MessageBoxButtons.OK, MessageBoxIcon.Information);
return false;
}
finally
{
}
}
]]>
inline unsigned __int64 GetTimeStampCount()
{
__asm RDTSC
}
瀵逛簬vc6鎴栬呭叾浠栫紪璇戝櫒鍙兘涓嶈錛屽洜涓篟DTSC涓嶈C++鐨勫唴宓屾眹緙栧櫒鐩存帴鏀寔錛屾墍浠ユ垜浠鐢╛emit浼寚浠ょ洿鎺ュ祵鍏ヨ鎸囦護鐨勬満鍣ㄧ爜褰㈠紡0X0F銆?X31錛屽涓嬶細
inline unsigned __int64 GetTimeStampCount()
{
__asm _emit 0x0F
__asm _emit 0x31
}
瀵瑰叧娉ㄦц兘鐨勭▼搴忓紑鍙戜漢鍛樿岃█錛屼竴涓ソ鐨勮鏃墮儴浠舵棦鏄泭鍙嬶紝涔熸槸鑹笀銆傝鏃跺櫒鏃㈠彲浠ヤ綔涓虹▼搴忕粍浠跺府鍔╃▼搴忓憳綺劇‘鐨勬帶鍒剁▼搴忚繘紼嬶紝鍙堟槸涓浠舵湁鍔涚殑璋冭瘯姝﹀櫒錛屽湪鏈夌粡楠岀殑紼嬪簭鍛樻墜閲屽彲浠ュ敖蹇殑紜畾紼嬪簭鐨勬ц兘鐡墮錛屾垨鑰呭涓嶅悓鐨勭畻娉曚綔鍑烘湁璇存湇鍔涚殑鎬ц兘姣旇緝銆?nbsp;
銆銆鍦╓indows騫沖彴涓嬶紝甯哥敤鐨勮鏃跺櫒鏈変袱縐嶏紝涓縐嶆槸timeGetTime澶氬獟浣撹鏃跺櫒錛屽畠鍙互鎻愪緵姣綰х殑璁℃椂銆備絾榪欎釜綺懼害瀵瑰緢澶氬簲鐢ㄥ満鍚堣岃█榪樻槸澶矖緋欎簡銆傚彟涓縐嶆槸QueryPerformanceCount璁℃暟鍣紝闅忕郴緇熺殑涓嶅悓鍙互鎻愪緵寰綰х殑璁℃暟銆傚浜庡疄鏃跺浘褰㈠鐞嗐佸濯掍綋鏁版嵁嫻佸鐞嗐佹垨鑰呭疄鏃剁郴緇熸瀯閫犵殑紼嬪簭鍛橈紝鍠勭敤QueryPerformanceCount/QueryPerformanceFrequency鏄竴欏瑰熀鏈姛銆?nbsp;
銆銆鏈枃瑕佷粙緇嶇殑錛屾槸鍙︿竴縐嶇洿鎺ュ埄鐢≒entium CPU鍐呴儴鏃墮棿鎴寵繘琛岃鏃剁殑楂樼簿搴﹁鏃舵墜孌點備互涓嬭璁轟富瑕佸緱鐩婁簬銆奧indows鍥懼艦緙栫▼銆嬩竴涔︼紝絎?nbsp; 15欏碉紞17欏碉紝鏈夊叴瓚g殑璇昏呭彲浠ョ洿鎺ュ弬鑰冭涔︺傚叧浜嶳DTSC鎸囦護鐨勮緇嗚璁猴紝鍙互鍙傝僆ntel浜у搧鎵嬪唽銆傛湰鏂囦粎浠呬綔鎶涚爾涔嬬敤銆?nbsp;
銆銆鍦?nbsp; Intel Pentium浠ヤ笂綰у埆鐨凜PU涓紝鏈変竴涓О涓?#8220;鏃墮棿鎴籌紙Time Stamp錛?#8221;鐨勯儴浠訛紝瀹冧互64浣嶆棤絎﹀彿鏁村瀷鏁扮殑鏍煎紡錛岃褰曚簡鑷狢PU涓婄數浠ユ潵鎵緇忚繃鐨勬椂閽熷懆鏈熸暟銆傜敱浜庣洰鍓嶇殑CPU涓婚閮介潪甯擱珮錛屽洜姝よ繖涓儴浠跺彲浠ヨ揪鍒扮撼縐掔駭鐨勮鏃剁簿搴︺傝繖涓簿紜ф槸涓婅堪涓ょ鏂規硶鎵鏃犳硶姣旀嫙鐨勩?nbsp;
銆銆鍦≒entium浠ヤ笂鐨凜PU涓紝鎻愪緵浜嗕竴鏉℃満鍣ㄦ寚浠DTSC錛圧ead Time Stamp Counter錛夋潵璇誨彇榪欎釜鏃墮棿鎴崇殑鏁板瓧錛屽茍灝嗗叾淇濆瓨鍦‥DX:EAX瀵勫瓨鍣ㄥ涓傜敱浜嶦DX:EAX瀵勫瓨鍣ㄥ鎭板ソ鏄疻in32騫沖彴涓婥++璇█淇濆瓨鍑芥暟榪斿洖鍊肩殑瀵勫瓨鍣紝鎵浠ユ垜浠彲浠ユ妸榪欐潯鎸囦護鐪嬫垚鏄竴涓櫘閫氱殑鍑芥暟璋冪敤銆傚儚榪欐牱錛?nbsp;
inline unsigned __int64 GetCycleCount()
{
__asm RDTSC
}
浣嗘槸涓嶈錛屽洜涓篟DTSC涓嶈C++鐨勫唴宓屾眹緙栧櫒鐩存帴鏀寔錛屾墍浠ユ垜浠鐢╛emit浼寚浠ょ洿鎺ュ祵鍏ヨ鎸囦護鐨勬満鍣ㄧ爜褰㈠紡0X0F銆?X31錛屽涓嬶細
inline unsigned __int64 GetCycleCount()
{
__asm _emit 0x0F
__asm _emit 0x31
}
浠ュ悗鍦ㄩ渶瑕佽鏁板櫒鐨勫満鍚堬紝鍙互鍍忎嬌鐢ㄦ櫘閫氱殑Win32 API涓鏍鳳紝璋冪敤涓ゆGetCycleCount鍑芥暟錛屾瘮杈冧袱涓繑鍥炲肩殑宸紝鍍忚繖鏍鳳細
unsigned long t;
t = (unsigned long)GetCycleCount();
//Do Something time-intensive ...
t -= (unsigned long)GetCycleCount();
銆銆銆奧indows鍥懼艦緙栫▼銆嬬15欏電紪鍐欎簡涓涓被錛屾妸榪欎釜璁℃暟鍣ㄥ皝瑁呰搗鏉ャ傛湁鍏磋叮鐨勮鑰呭彲浠ュ幓鍙傝冮偅涓被鐨勪唬鐮併備綔鑰呬負浜嗘洿綺劇‘鐨勫畾鏃訛紝鍋氫簡涓鐐瑰皬灝忕殑鏀硅繘錛屾妸鎵цRDTSC鎸囦護鐨勬椂闂達紝閫氳繃榪炵畫涓ゆ璋冪敤GetCycleCount鍑芥暟璁$畻鍑烘潵騫朵繚瀛樹簡璧鋒潵錛屼互鍚庢瘡嬈¤鏃剁粨鏉熷悗錛岄兘浠庡疄闄呭緱鍒扮殑璁℃暟涓噺鎺夎繖涓灝忔鏃墮棿錛屼互寰楀埌鏇村噯紜殑璁℃椂鏁板瓧銆備絾鎴戜釜浜鴻寰楄繖涓鐐圭偣鏀硅繘鎰忎箟涓嶅ぇ銆傚湪鎴戠殑鏈哄櫒涓婂疄嫻嬶紝榪欐潯鎸囦護澶ф鑺辨帀浜嗗嚑鍗佸埌100澶氫釜鍛ㄦ湡錛屽湪 Celeron 800MHz鐨勬満鍣ㄤ笂錛岃繖涓嶈繃鏄崄鍒嗕箣涓寰鐨勬椂闂淬傚澶у鏁板簲鐢ㄦ潵璇達紝榪欑偣鏃墮棿瀹屽叏鍙互蹇界暐涓嶈錛涜屽閭d簺紜疄瑕佺簿紜埌綰崇鏁伴噺綰х殑搴旂敤鏉ヨ錛岃繖涓ˉ鍋夸篃榪囦簬綺楃硻浜嗐?nbsp;
榪欎釜鏂規硶鐨勪紭鐐規槸錛?nbsp;
1.楂樼簿搴︺傚彲浠ョ洿鎺ヨ揪鍒扮撼縐掔駭鐨勮鏃剁簿搴︼紙鍦?GHz鐨凜PU涓婃瘡涓椂閽熷懆鏈熷氨鏄竴綰崇錛夛紝榪欐槸鍏朵粬璁℃椂鏂規硶鎵闅句互浼佸強鐨勩?nbsp;
2. 鎴愭湰浣庛倀imeGetTime 鍑芥暟闇瑕侀摼鎺ュ濯掍綋搴搘inmm.lib錛孮ueryPerformance* 鍑芥暟鏍規嵁MSDN鐨勮鏄庯紝闇瑕佺‖浠剁殑鏀寔錛堣櫧鐒舵垜榪樻病鏈夎榪囦笉鏀寔鐨勬満鍣級鍜孠ERNEL搴撶殑鏀寔錛屾墍浠ヤ簩鑰呴兘鍙兘鍦╓indows騫沖彴涓嬩嬌鐢紙鍏充簬DOS騫沖彴涓嬬殑楂樼簿搴﹁鏃墮棶棰橈紝鍙互鍙傝冦婂浘褰㈢▼搴忓紑鍙戜漢鍛樻寚鍗椼嬶紝閲岄潰鏈夊叧浜庢帶鍒跺畾鏃跺櫒8253鐨勮緇嗚鏄庯級銆備絾RDTSC鎸囦護鏄竴鏉PU鎸囦護錛屽嚒鏄痠386騫沖彴涓婸entium浠ヤ笂鐨勬満鍣ㄥ潎鏀寔錛岀敋鑷蟲病鏈夊鉤鍙扮殑闄愬埗錛堟垜鐩鎬俊i386鐗堟湰UNIX鍜孡inux涓嬭繖涓柟娉曞悓鏍烽傜敤錛屼絾娌℃湁鏉′歡璇曢獙錛夛紝鑰屼笖鍑芥暟璋冪敤鐨勫紑閿鏄渶灝忕殑銆?nbsp;
3. 鍏鋒湁鍜孋PU涓婚鐩存帴瀵瑰簲鐨勯熺巼鍏崇郴銆備竴涓鏁扮浉褰撲簬1/(CPU涓婚Hz鏁?縐掞紝榪欐牱鍙鐭ラ亾浜咰PU鐨勪富棰戯紝鍙互鐩存帴璁$畻鍑烘椂闂淬傝繖鍜?nbsp; QueryPerformanceCount涓嶅悓錛屽悗鑰呴渶瑕侀氳繃QueryPerformanceFrequency鑾峰彇褰撳墠璁℃暟鍣ㄦ瘡縐掔殑璁℃暟嬈℃暟鎵嶈兘鎹㈢畻鎴愭椂闂淬?nbsp;
榪欎釜鏂規硶鐨勭己鐐規槸錛?nbsp;
1.鐜版湁鐨凜/C++緙栬瘧鍣ㄥ鏁頒笉鐩存帴鏀寔浣跨敤RDTSC鎸囦護錛岄渶瑕佺敤鐩存帴宓屽叆鏈哄櫒鐮佺殑鏂瑰紡緙栫▼錛屾瘮杈冮夯鐑︺?nbsp;
2.鏁版嵁鎶栧姩姣旇緝鍘夊銆傚叾瀹炲浠諱綍璁¢噺鎵嬫鑰岃█錛岀簿搴﹀拰紼沖畾鎬ф案榪滄槸涓瀵圭煕鐩俱傚鏋滅敤浣庣簿搴︾殑timeGetTime鏉ヨ鏃訛紝鍩烘湰涓婃瘡嬈¤鏃剁殑緇撴灉閮芥槸鐩稿悓鐨勶紱鑰孯DTSC鎸囦護姣忔緇撴灉閮戒笉涓鏍鳳紝緇忓父鏈夊嚑鐧劇敋鑷充笂鍗冪殑宸窛銆傝繖鏄繖縐嶆柟娉曢珮綺懼害鏈韓鍥烘湁鐨勭煕鐩俱?nbsp;
鍏充簬榪欎釜鏂規硶璁℃椂鐨勬渶澶ч暱搴︼紝鎴戜滑鍙互綆鍗曠殑鐢ㄤ笅鍒楀叕寮忚綆楋細
鑷狢PU涓婄數浠ユ潵鐨勭鏁?nbsp; = RDTSC璇誨嚭鐨勫懆鏈熸暟 / CPU涓婚閫熺巼錛圚z錛?nbsp;
64浣嶆棤絎﹀彿鏁存暟鎵鑳借〃杈劇殑鏈澶ф暟瀛楁槸1.8×10^19錛屽湪鎴戠殑Celeron 800涓婂彲浠ヨ鏃跺ぇ綰?00騫達紙涔︿腑璇村彲浠ュ湪200MHz鐨凱entium涓婅鏃?17騫達紝榪欎釜鏁板瓧涓嶇煡閬撴槸鎬庝箞寰楀嚭鏉ョ殑錛屼笌鎴戠殑璁$畻鏈夊嚭鍏ワ級銆傛棤璁哄浣曪紝鎴戜滑澶у彲涓嶅繀鍏沖績婧㈠嚭鐨勯棶棰樸?nbsp;
涓嬮潰鏄嚑涓皬渚嬪瓙錛岀畝瑕佹瘮杈冧簡涓夌璁℃椂鏂規硶鐨勭敤娉曚笌綺懼害
//Timer1.cpp 浣跨敤浜哛DTSC鎸囦護鐨凾imer綾?/KTimer綾葷殑瀹氫箟鍙互鍙傝銆奧indows鍥懼艦緙栫▼銆婸15
//緙栬瘧琛岋細CL Timer1.cpp /link USER32.lib
#include <stdio.h>
#include "KTimer.h"
main()
{
unsigned t;
KTimer timer;
timer.Start();
Sleep(1000);
t = timer.Stop();
printf("Lasting Time: %d\n",t);
}
//Timer2.cpp 浣跨敤浜唗imeGetTime鍑芥暟
//闇鍖呭惈<mmsys.h>錛屼絾鐢變簬Windows澶存枃浠墮敊緇煎鏉傜殑鍏崇郴
//綆鍗曞寘鍚?amp;ltwindows.h>姣旇緝鍋鋒噿錛氾級
//緙栬瘧琛岋細CL timer2.cpp /link winmm.lib
#include <windows.h>
#include <stdio.h>
main()
{
DWORD t1, t2;
t1 = timeGetTime();
Sleep(1000);
t2 = timeGetTime();
printf("Begin Time: %u\n", t1);
printf("End Time: %u\n", t2);
printf("Lasting Time: %u\n",(t2-t1));
}
//Timer3.cpp 浣跨敤浜哘ueryPerformanceCounter鍑芥暟
//緙栬瘧琛岋細CL timer3.cpp /link KERNEl32.lib
#include <windows.h>
#include <stdio.h>
main()
{
LARGE_INTEGER t1, t2, tc;
QueryPerformanceFrequency(&tc);
printf("Frequency: %u\n", tc.QuadPart);
QueryPerformanceCounter(&t1);
Sleep(1000);
QueryPerformanceCounter(&t2);
printf("Begin Time: %u\n", t1.QuadPart);
printf("End Time: %u\n", t2.QuadPart);
printf("Lasting Time: %u\n",( t2.QuadPart- t1.QuadPart));
}
////////////////////////////////////////////////
//浠ヤ笂涓変釜紺轟緥紼嬪簭閮芥槸嫻嬭瘯1縐掗挓浼戠湢鎵鑰楄垂鐨勬椂闂?nbsp;
file://嫻?璇曠幆澧冿細Celeron 800MHz / 256M SDRAM
// Windows 2000 Professional SP2
// Microsoft Visual C++ 6.0 SP5
////////////////////////////////////////////////
浠ヤ笅鏄疶imer1鐨勮繍琛岀粨鏋滐紝浣跨敤鐨勬槸楂樼簿搴︾殑RDTSC鎸囦護
Lasting Time: 804586872
浠ヤ笅鏄疶imer2鐨勮繍琛岀粨鏋滐紝浣跨敤鐨勬槸鏈綺楃硻鐨則imeGetTime API
Begin Time: 20254254
End Time: 20255255
Lasting Time: 1001
浠ヤ笅鏄疶imer3鐨勮繍琛岀粨鏋滐紝浣跨敤鐨勬槸QueryPerformanceCount API
Frequency: 3579545
Begin Time: 3804729124
End Time: 3808298836
Lasting Time: 3569712
嬈㈣繋鏀惰棌鏈枃 涓璧瘋緗?銆愯幏鍙朇PU鏃墮棿鎴充唬鐮?浣跨敤CPU鏃墮棿鎴寵繘琛岄珮綺懼害璁℃椂 http://www.1qidu.com/?action-viewnews-itemid-16841銆?br>涓璧瘋緗戝弬鑰冨湴鍧錛?a >http://www.1qidu.com/?action-viewnews-itemid-16841
DWORD WINAPI Fun1Proc(LPVOID lpParameter);
DWORD WINAPI Fun2Proc(LPVOID lpParameter);
int index=0;
int tickets=100;
HANDLE hMutex;
void main()
{
HANDLE hThread1,hThread2;
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
hMutex=CreateMutex(NULL,FALSE,NULL);
//TRUE浠h〃涓葷嚎紼嬫嫢鏈変簰鏂ュ璞?浣嗘槸涓葷嚎紼嬫病鏈夐噴鏀捐瀵硅薄 浜掓枼瀵硅薄璋佹嫢鏈?璋侀噴鏀?br> //FLASE浠h〃褰撳墠娌℃湁綰跨▼鎷ユ湁榪欎釜浜掓枼瀵硅薄
Sleep(4000);
}
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
while (true)
{
WaitForSingleObject(hMutex,INFINITE);
if (tickets>0)
{
cout<<"t1: "<<tickets--<<endl;
}
else
{
break;
}
ReleaseMutex(hMutex);
}
return 0;
}
DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
while (true)
{
WaitForSingleObject(hMutex,INFINITE);
if (tickets>0)
{
cout<<"t2: "<<tickets--<<endl;
}
else
{
break;
}
ReleaseMutex(hMutex);
}
return 0;
}
姝や俊鎭潵鑷栬蔣宸ュ惂璁哄潧http://www.gcs8.cn銆?br>鏌ョ湅鍘熺綉鍧:http://www.gcs8.cn/htm_data/2/0811/15807.html
BOOL Cls_OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct)
{
MessageBox(NULL,"浣跨敤娑堟伅鍒嗘祦鍣ㄥ垱寤虹獥鍙f垚鍔?,"ddd",MB_OK);
return 1;
}
LRESULT CALLBACK WinProc(HWND hwnd,
UINT msg,
WPARAM wparam,
LPARAM lparam)
{
switch(msg)
{
case WM_CREATE:
return HANDLE_WM_CREATE(hwnd, wparam, lparam, Cls_OnCreate);
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wparam, lparam);
}
//榪欓噷鍙互杈撳叆鍝嶅簲娑堟伅鐨勪唬鐮?br> return 0;
}
int WINAPI WinMain(HINSTANCE hinstance,
HINSTANCE hprevinstance,
LPSTR lpcmdline,
int ncmdshow)
{
HWND hWnd;
MSG msg;
WNDCLASSEX wndclass;
wndclass.cbSize=sizeof(WNDCLASSEX);
wndclass.style=CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc=(WNDPROC) WinProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance = hinstance;
wndclass.hIcon = LoadIcon(NULL,IDI_ERROR);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = "WINCLASS1";
wndclass.hIconSm = LoadIcon(wndclass.hInstance, (LPCTSTR)IDI_ERROR);
wndclass.lpszMenuName = NULL;
wndclass.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH);
wndclass.lpszClassName ="WINCLASS1";
if (!RegisterClassEx(&wndclass))
{
MessageBox(NULL,"ddd","ddd",MB_OK);
return 0;
} // //……
hWnd=CreateWindowEx(NULL,"WINCLASS1",
"wndtitle",
WS_OVERLAPPEDWINDOW|WS_VISIBLE ,
CW_USEDEFAULT, 0,
400,400,
NULL,
NULL,
hinstance,
NULL );
if (!hWnd)
return 0;
ShowWindow(hWnd, ncmdshow);
UpdateWindow(hWnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
杞笘娉ㄦ槑鏉ヨ嚜杞伐鍚ц鍧?br>姝や俊鎭潵鑷栬蔣宸ュ惂璁哄潧http://www.gcs8.cn銆?br>鏌ョ湅鍘熺綉鍧:http://www.gcs8.cn/htm_data/2/0811/15785.html
涓婇潰鐨処Codec鎺ュ彛絳変環浜庝笅闈㈢殑瀹氫箟錛?/pre>class ICodec
{
public:
virtual bool Decode(char * lpDataSrc,unsigned int nSrcLen,char * lpDataDst,unsigned int *pnDstLen)=0;
virtual bool Encode(char * lpDataSrc,unsigned int nSrcLen,char * lpDataDst,unsigned int *pnDstLen)=0;
};
]]>
鏍規嵁寰蔣鐨勮娉?Visual C++ 6.0 鏀寔鐨勬渶鍚庝竴涓猄DK鏄?Windows Server 2003 PSDK 鐗堟湰,騫歌繍鐨勬槸鍦ㄧ綉涓婁篃鎵懼埌浜?XPSP2 PSDK 鐗堟湰,鍦ㄨ繖閲屾劅璋㈢綉鍙嬪彂鐜扮殑涓嬭澆鍦板潃:
Platform SDK XPSP2:
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm
Platform SDK February 2003:
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm