標籤:字元 技術 color drawing linq star oid obj images
Snapman集合了TCC編譯器可以直接編譯執行C語言指令碼,其指令碼執行效率和C#編譯器進行效率對比,包括下面3方面:
1、函數執行效率
2、數字轉換成字串
3、字串的疊加
這是C#代碼:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace TestEfficiency{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } int fibonacci(int n) { if (n == 1 || n == 2) return 1; return fibonacci(n - 1) + fibonacci(n - 2); } string numberConvert() { string result = ""; for (int i = 0; i < 14000000; i++ ) { result = i.ToString(); } return result; } string stringAppend() { string conc = "StringBuilder sb = new StringBuilder(1024);"; StringBuilder sb = new StringBuilder(1024); for (int i = 0; i < 1400; i++) { sb = new StringBuilder(1024); for (int j = 0; j < 10000; j++ ) { sb.Append(conc); } } return sb.ToString(); } private void button1_Click(object sender, EventArgs e) { DateTime fbeforDT = System.DateTime.Now; fibonacci(45); DateTime fafterDT = System.DateTime.Now; TimeSpan ts = fafterDT.Subtract(fbeforDT); textBox1.Text = string.Format("fibonacci spend: {0}ms.", ts.TotalMilliseconds); DateTime nbeforDT = System.DateTime.Now; numberConvert(); DateTime nafterDT = System.DateTime.Now; TimeSpan nts = nafterDT.Subtract(nbeforDT); textBox2.Text = string.Format("numberConvert spend: {0}ms.", nts.TotalMilliseconds); DateTime sbeforDT = System.DateTime.Now; stringAppend(); DateTime safterDT = System.DateTime.Now; TimeSpan sts = safterDT.Subtract(sbeforDT); textBox3.Text = string.Format("stringAppend spend: {0}ms.", sts.TotalMilliseconds); } }}
這是C#編譯出來Release的頁面:
這是Snapman系統中寫的TCC指令碼代碼:
int fibonacci(int n) { if(n==1||n==2) return 1; return fibonacci(n-1) + fibonacci(n-2); }char* numberConvert(){ char* result = (char*)malloc(128); for (int i = 0; i < 14000000; i++ ) { itoa(i,result,10); } return result;}char* stringAppend(){ char* conc = "StringBuilder sb = new StringBuilder(1024);"; char* sb = (char*)malloc(1024),*p; int len = 1024, cl = strlen(conc), curlen = 0; for (int i = 0; i < 1400; i++) { free(sb); len = 1024; curlen = 0; sb = (char*)malloc(1024); for(int j = 0; j < 10000; j++) { if(curlen + cl > len) { p = (char*)malloc(len*2); memcpy(p,sb,curlen); free(sb); sb = p; len *= 2; } memcpy(sb+curlen,conc,cl); curlen += cl; } } sb[curlen] = 0; return sb;}void main(){ int starTicc = GetTickCount(); fibonacci(45); wPrint(L"fibonacci spend: %dms",GetTickCount() - starTicc); starTicc = GetTickCount(); free(numberConvert()); wPrint(L"numberConvert spend: %dms",GetTickCount() - starTicc); starTicc = GetTickCount(); free(stringAppend()); wPrint(L"stringAppend spend: %dms",GetTickCount() - starTicc);}
這是Snapman頁面:
兩種代碼的設計和實現方法完全一樣,其運行結果對比:
C#執行結果:
Snapman執行結果:
結論:對比結果發現C#除了最高效的StringBuilder和TCC字串操作執行速度接近外其他的運行速度都要比Snapman的運行速度慢一些,所以Snapman的指令碼運行速度是非常快速的。
Snapman的首頁:http://www.snapman.xyz
Snapman系統中TCC執行效率和C#執行效率對比