Snapman集合了TCC编译器可以直接编译执行C语言脚本,其脚本执行效率和C#编译程序进行效率对比,包括下面4方面:

1、函数执行效率

2、数字转换成字符串

3、字符串的叠加

4、MD5算法

这是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;
using System.IO;
using System.Collections; namespace TestEfficiency
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} int fibonacci(int n)
{
if (n == || n == )
return ;
return fibonacci(n - ) + fibonacci(n - );
}
string numberConvert()
{
string result = "";
for (int i = ; i < ; i++ )
{
result = i.ToString();
}
return result;
}
string stringAppend()
{
string conc = "StringBuilder sb = new StringBuilder(1024);";
StringBuilder sb = new StringBuilder();
for (int i = ; i < ; i++)
{
sb = new StringBuilder();
for (int j = ; j < ; j++ )
{
sb.Append(conc);
}
}
return sb.ToString();
}
public class MD5
{
//static state variables
private static UInt32 A;
private static UInt32 B;
private static UInt32 C;
private static UInt32 D; //number of bits to rotate in tranforming
private const int S11 = ;
private const int S12 = ;
private const int S13 = ;
private const int S14 = ;
private const int S21 = ;
private const int S22 = ;
private const int S23 = ;
private const int S24 = ;
private const int S31 = ;
private const int S32 = ;
private const int S33 = ;
private const int S34 = ;
private const int S41 = ;
private const int S42 = ;
private const int S43 = ;
private const int S44 = ; /* F, G, H and I are basic MD5 functions.
* 四个非线性函数:
*
* F(X,Y,Z) =(X&Y)|((~X)&Z)
* G(X,Y,Z) =(X&Z)|(Y&(~Z))
* H(X,Y,Z) =X^Y^Z
* I(X,Y,Z)=Y^(X|(~Z))
*
* (&与,|或,~非,^异或)
*/
private static UInt32 F(UInt32 x, UInt32 y, UInt32 z)
{
return (x & y) | ((~x) & z);
}
private static UInt32 G(UInt32 x, UInt32 y, UInt32 z)
{
return (x & z) | (y & (~z));
}
private static UInt32 H(UInt32 x, UInt32 y, UInt32 z)
{
return x ^ y ^ z;
}
private static UInt32 I(UInt32 x, UInt32 y, UInt32 z)
{
return y ^ (x | (~z));
} /* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
* Rotation is separate from addition to prevent recomputation.
*/
private static void FF(ref UInt32 a, UInt32 b, UInt32 c, UInt32 d, UInt32 mj, int s, UInt32 ti)
{
a = a + F(b, c, d) + mj + ti;
a = a << s | a >> ( - s);
a += b;
}
private static void GG(ref UInt32 a, UInt32 b, UInt32 c, UInt32 d, UInt32 mj, int s, UInt32 ti)
{
a = a + G(b, c, d) + mj + ti;
a = a << s | a >> ( - s);
a += b;
}
private static void HH(ref UInt32 a, UInt32 b, UInt32 c, UInt32 d, UInt32 mj, int s, UInt32 ti)
{
a = a + H(b, c, d) + mj + ti;
a = a << s | a >> ( - s);
a += b;
}
private static void II(ref UInt32 a, UInt32 b, UInt32 c, UInt32 d, UInt32 mj, int s, UInt32 ti)
{
a = a + I(b, c, d) + mj + ti;
a = a << s | a >> ( - s);
a += b;
} private static void MD5_Init()
{
A = 0x67452301; //in memory, this is 0x01234567
B = 0xefcdab89; //in memory, this is 0x89abcdef
C = 0x98badcfe; //in memory, this is 0xfedcba98
D = 0x10325476; //in memory, this is 0x76543210
} private static UInt32[] MD5_Append(byte[] input)
{
int zeros = ;
int ones = ;
int size = ;
int n = input.Length;
int m = n % ;
if (m < )
{
zeros = - m;
size = n - m + ;
}
else if (m == )
{
zeros = ;
ones = ;
size = n + ;
}
else
{
zeros = - m + ;
size = n + - m + ;
} ArrayList bs = new ArrayList(input);
if (ones == )
{
bs.Add((byte)0x80); // 0x80 = $10000000
}
for (int i = ; i < zeros; i++)
{
bs.Add((byte));
} UInt64 N = (UInt64)n * ;
byte h1 = (byte)(N & 0xFF);
byte h2 = (byte)((N >> ) & 0xFF);
byte h3 = (byte)((N >> ) & 0xFF);
byte h4 = (byte)((N >> ) & 0xFF);
byte h5 = (byte)((N >> ) & 0xFF);
byte h6 = (byte)((N >> ) & 0xFF);
byte h7 = (byte)((N >> ) & 0xFF);
byte h8 = (byte)(N >> );
bs.Add(h1);
bs.Add(h2);
bs.Add(h3);
bs.Add(h4);
bs.Add(h5);
bs.Add(h6);
bs.Add(h7);
bs.Add(h8);
byte[] ts = (byte[])bs.ToArray(typeof(byte)); /* Decodes input (byte[]) into output (UInt32[]). Assumes len is
* a multiple of 4.
*/
UInt32[] output = new UInt32[size / ];
for (Int64 i = , j = ; i < size; j++, i += )
{
output[j] = (UInt32)(ts[i] | ts[i + ] << | ts[i + ] << | ts[i + ] << );
}
return output;
}
private static UInt32[] MD5_Trasform(UInt32[] x)
{ UInt32 a, b, c, d; for (int k = ; k < x.Length; k += )
{
a = A;
b = B;
c = C;
d = D; /* Round 1 */
FF(ref a, b, c, d, x[k + ], S11, 0xd76aa478); /* 1 */
FF(ref d, a, b, c, x[k + ], S12, 0xe8c7b756); /* 2 */
FF(ref c, d, a, b, x[k + ], S13, 0x242070db); /* 3 */
FF(ref b, c, d, a, x[k + ], S14, 0xc1bdceee); /* 4 */
FF(ref a, b, c, d, x[k + ], S11, 0xf57c0faf); /* 5 */
FF(ref d, a, b, c, x[k + ], S12, 0x4787c62a); /* 6 */
FF(ref c, d, a, b, x[k + ], S13, 0xa8304613); /* 7 */
FF(ref b, c, d, a, x[k + ], S14, 0xfd469501); /* 8 */
FF(ref a, b, c, d, x[k + ], S11, 0x698098d8); /* 9 */
FF(ref d, a, b, c, x[k + ], S12, 0x8b44f7af); /* 10 */
FF(ref c, d, a, b, x[k + ], S13, 0xffff5bb1); /* 11 */
FF(ref b, c, d, a, x[k + ], S14, 0x895cd7be); /* 12 */
FF(ref a, b, c, d, x[k + ], S11, 0x6b901122); /* 13 */
FF(ref d, a, b, c, x[k + ], S12, 0xfd987193); /* 14 */
FF(ref c, d, a, b, x[k + ], S13, 0xa679438e); /* 15 */
FF(ref b, c, d, a, x[k + ], S14, 0x49b40821); /* 16 */ /* Round 2 */
GG(ref a, b, c, d, x[k + ], S21, 0xf61e2562); /* 17 */
GG(ref d, a, b, c, x[k + ], S22, 0xc040b340); /* 18 */
GG(ref c, d, a, b, x[k + ], S23, 0x265e5a51); /* 19 */
GG(ref b, c, d, a, x[k + ], S24, 0xe9b6c7aa); /* 20 */
GG(ref a, b, c, d, x[k + ], S21, 0xd62f105d); /* 21 */
GG(ref d, a, b, c, x[k + ], S22, 0x2441453); /* 22 */
GG(ref c, d, a, b, x[k + ], S23, 0xd8a1e681); /* 23 */
GG(ref b, c, d, a, x[k + ], S24, 0xe7d3fbc8); /* 24 */
GG(ref a, b, c, d, x[k + ], S21, 0x21e1cde6); /* 25 */
GG(ref d, a, b, c, x[k + ], S22, 0xc33707d6); /* 26 */
GG(ref c, d, a, b, x[k + ], S23, 0xf4d50d87); /* 27 */
GG(ref b, c, d, a, x[k + ], S24, 0x455a14ed); /* 28 */
GG(ref a, b, c, d, x[k + ], S21, 0xa9e3e905); /* 29 */
GG(ref d, a, b, c, x[k + ], S22, 0xfcefa3f8); /* 30 */
GG(ref c, d, a, b, x[k + ], S23, 0x676f02d9); /* 31 */
GG(ref b, c, d, a, x[k + ], S24, 0x8d2a4c8a); /* 32 */ /* Round 3 */
HH(ref a, b, c, d, x[k + ], S31, 0xfffa3942); /* 33 */
HH(ref d, a, b, c, x[k + ], S32, 0x8771f681); /* 34 */
HH(ref c, d, a, b, x[k + ], S33, 0x6d9d6122); /* 35 */
HH(ref b, c, d, a, x[k + ], S34, 0xfde5380c); /* 36 */
HH(ref a, b, c, d, x[k + ], S31, 0xa4beea44); /* 37 */
HH(ref d, a, b, c, x[k + ], S32, 0x4bdecfa9); /* 38 */
HH(ref c, d, a, b, x[k + ], S33, 0xf6bb4b60); /* 39 */
HH(ref b, c, d, a, x[k + ], S34, 0xbebfbc70); /* 40 */
HH(ref a, b, c, d, x[k + ], S31, 0x289b7ec6); /* 41 */
HH(ref d, a, b, c, x[k + ], S32, 0xeaa127fa); /* 42 */
HH(ref c, d, a, b, x[k + ], S33, 0xd4ef3085); /* 43 */
HH(ref b, c, d, a, x[k + ], S34, 0x4881d05); /* 44 */
HH(ref a, b, c, d, x[k + ], S31, 0xd9d4d039); /* 45 */
HH(ref d, a, b, c, x[k + ], S32, 0xe6db99e5); /* 46 */
HH(ref c, d, a, b, x[k + ], S33, 0x1fa27cf8); /* 47 */
HH(ref b, c, d, a, x[k + ], S34, 0xc4ac5665); /* 48 */ /* Round 4 */
II(ref a, b, c, d, x[k + ], S41, 0xf4292244); /* 49 */
II(ref d, a, b, c, x[k + ], S42, 0x432aff97); /* 50 */
II(ref c, d, a, b, x[k + ], S43, 0xab9423a7); /* 51 */
II(ref b, c, d, a, x[k + ], S44, 0xfc93a039); /* 52 */
II(ref a, b, c, d, x[k + ], S41, 0x655b59c3); /* 53 */
II(ref d, a, b, c, x[k + ], S42, 0x8f0ccc92); /* 54 */
II(ref c, d, a, b, x[k + ], S43, 0xffeff47d); /* 55 */
II(ref b, c, d, a, x[k + ], S44, 0x85845dd1); /* 56 */
II(ref a, b, c, d, x[k + ], S41, 0x6fa87e4f); /* 57 */
II(ref d, a, b, c, x[k + ], S42, 0xfe2ce6e0); /* 58 */
II(ref c, d, a, b, x[k + ], S43, 0xa3014314); /* 59 */
II(ref b, c, d, a, x[k + ], S44, 0x4e0811a1); /* 60 */
II(ref a, b, c, d, x[k + ], S41, 0xf7537e82); /* 61 */
II(ref d, a, b, c, x[k + ], S42, 0xbd3af235); /* 62 */
II(ref c, d, a, b, x[k + ], S43, 0x2ad7d2bb); /* 63 */
II(ref b, c, d, a, x[k + ], S44, 0xeb86d391); /* 64 */ A += a;
B += b;
C += c;
D += d;
}
return new UInt32[] { A, B, C, D };
}
public static byte[] MD5Array(byte[] input)
{
MD5_Init();
UInt32[] block = MD5_Append(input);
UInt32[] bits = MD5_Trasform(block); /* Encodes bits (UInt32[]) into output (byte[]). Assumes len is
* a multiple of 4.
*/
byte[] output = new byte[bits.Length * ];
for (int i = , j = ; i < bits.Length; i++, j += )
{
output[j] = (byte)(bits[i] & 0xff);
output[j + ] = (byte)((bits[i] >> ) & 0xff);
output[j + ] = (byte)((bits[i] >> ) & 0xff);
output[j + ] = (byte)((bits[i] >> ) & 0xff);
}
return output;
} public static string ArrayToHexString(byte[] array, bool uppercase)
{
string hexString = "";
string format = "x2";
if (uppercase)
{
format = "X2";
}
foreach (byte b in array)
{
hexString += b.ToString(format);
}
return hexString;
} public static string MDString(string message)
{
char[] c = message.ToCharArray();
byte[] b = new byte[c.Length];
for (int i = ; i < c.Length; i++)
{
b[i] = (byte)c[i];
}
byte[] digest = MD5Array(b);
return ArrayToHexString(digest, false);
}
}
string testMd5()
{ string conc = "StringBuilder sb = new StringBuilder(1024);StringBuilder sb = new StringBuilder(1024);StringBuilder sb = new StringBuilder(1024);StringBuilder sb = new StringBuilder(1024);";
conc = conc + conc + conc + conc + conc + conc + conc + conc;
string about = "";
for (int i = ; i < ; i++ )
{
about = MD5.MDString(conc);
}
return about;
}
private void button1_Click(object sender, EventArgs e)
{
DateTime fbeforDT = System.DateTime.Now;
fibonacci();
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); DateTime mbeforDT = System.DateTime.Now;
testMd5();
DateTime mafterDT = System.DateTime.Now;
TimeSpan mts = mafterDT.Subtract(mbeforDT);
textBox4.Text = string.Format("testMd5 spend: {0}ms.", mts.TotalMilliseconds); }
} }

这是C#编译出来Release的页面:

这是Snapman系统中写的TCC脚本代码:

int fibonacci(int n)
{
if(n==||n==)
return ;
return fibonacci(n-) + fibonacci(n-);
}
char* numberConvert()
{
char* result = (char*)malloc();
for (int i = ; i < ; i++ )
{
itoa(i,result,);
}
return result;
}
char* stringAppend()
{
char* conc = "StringBuilder sb = new StringBuilder(1024);";
char* sb = (char*)malloc();
int len = , cl = strlen(conc), curlen = ;
for (int i = ; i < ; i++)
{
free(sb);
len = ;
curlen = ;
sb = (char*)malloc();
for(int j = ; j < ; j++)
{
if(curlen + cl > len)
{
sb = (char*)realloc(sb,len*);
len *= ;
}
memcpy(sb+curlen,conc,cl);
curlen += cl;
}
}
sb[curlen] = ;
return sb;
} #define S11 7
#define S12 12
#define S13 17
#define S14 22
#define S21 5
#define S22 9
#define S23 14
#define S24 20
#define S31 4
#define S32 11
#define S33 16
#define S34 23
#define S41 6
#define S42 10
#define S43 15
#define S44 21 static unsigned char PADDING[] = {
0x80, , , , , , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , , , , , , ,
}; #define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
#define H(x, y, z) ((x) ^ (y) ^ (z))
#define I(x, y, z) ((y) ^ ((x) | (~z))) #define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) #define FF(a, b, c, d, x, s, ac) { (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); (a) = ROTATE_LEFT ((a), (s)); (a) += (b); }
#define GG(a, b, c, d, x, s, ac) { (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); (a) = ROTATE_LEFT ((a), (s)); (a) += (b); }
#define HH(a, b, c, d, x, s, ac) { (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); (a) = ROTATE_LEFT ((a), (s)); (a) += (b); }
#define II(a, b, c, d, x, s, ac) { (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); (a) = ROTATE_LEFT ((a), (s)); (a) += (b); } typedef unsigned char *POINTER;
typedef unsigned short int UINT2;
typedef unsigned long int UINT4;
typedef struct
{
UINT4 state[];
UINT4 count[];
unsigned char buffer[];
} MD5_CTX; void Encode(unsigned char *output, UINT4 *input, unsigned int len)
{
unsigned int i, j; for (i = , j = ; j < len; i++, j += ) {
output[j] = (unsigned char)(input[i] & 0xff);
output[j+] = (unsigned char)((input[i] >> ) & 0xff);
output[j+] = (unsigned char)((input[i] >> ) & 0xff);
output[j+] = (unsigned char)((input[i] >> ) & 0xff);
}
} void Decode(UINT4 *output, unsigned char *input, unsigned int len)
{
unsigned int i, j; for (i = , j = ; j < len; i++, j += )
{
output[i] = ((UINT4)input[j]) | (((UINT4)input[j+]) << ) |
(((UINT4)input[j+]) << ) | (((UINT4)input[j+]) << );
}
} void MD5Transform (UINT4 state[], unsigned char block[])
{
UINT4 a = state[], b = state[], c = state[], d = state[], x[];
Decode (x, block, );
FF (a, b, c, d, x[ ], S11, 0xd76aa478); /* 1 */
FF (d, a, b, c, x[ ], S12, 0xe8c7b756); /* 2 */
FF (c, d, a, b, x[ ], S13, 0x242070db); /* 3 */
FF (b, c, d, a, x[ ], S14, 0xc1bdceee); /* 4 */
FF (a, b, c, d, x[ ], S11, 0xf57c0faf); /* 5 */
FF (d, a, b, c, x[ ], S12, 0x4787c62a); /* 6 */
FF (c, d, a, b, x[ ], S13, 0xa8304613); /* 7 */
FF (b, c, d, a, x[ ], S14, 0xfd469501); /* 8 */
FF (a, b, c, d, x[ ], S11, 0x698098d8); /* 9 */
FF (d, a, b, c, x[ ], S12, 0x8b44f7af); /* 10 */
FF (c, d, a, b, x[], S13, 0xffff5bb1); /* 11 */
FF (b, c, d, a, x[], S14, 0x895cd7be); /* 12 */
FF (a, b, c, d, x[], S11, 0x6b901122); /* 13 */
FF (d, a, b, c, x[], S12, 0xfd987193); /* 14 */
FF (c, d, a, b, x[], S13, 0xa679438e); /* 15 */
FF (b, c, d, a, x[], S14, 0x49b40821); /* 16 */
GG (a, b, c, d, x[ ], S21, 0xf61e2562); /* 17 */
GG (d, a, b, c, x[ ], S22, 0xc040b340); /* 18 */
GG (c, d, a, b, x[], S23, 0x265e5a51); /* 19 */
GG (b, c, d, a, x[ ], S24, 0xe9b6c7aa); /* 20 */
GG (a, b, c, d, x[ ], S21, 0xd62f105d); /* 21 */
GG (d, a, b, c, x[], S22, 0x2441453); /* 22 */
GG (c, d, a, b, x[], S23, 0xd8a1e681); /* 23 */
GG (b, c, d, a, x[ ], S24, 0xe7d3fbc8); /* 24 */
GG (a, b, c, d, x[ ], S21, 0x21e1cde6); /* 25 */
GG (d, a, b, c, x[], S22, 0xc33707d6); /* 26 */
GG (c, d, a, b, x[ ], S23, 0xf4d50d87); /* 27 */
GG (b, c, d, a, x[ ], S24, 0x455a14ed); /* 28 */
GG (a, b, c, d, x[], S21, 0xa9e3e905); /* 29 */
GG (d, a, b, c, x[ ], S22, 0xfcefa3f8); /* 30 */
GG (c, d, a, b, x[ ], S23, 0x676f02d9); /* 31 */
GG (b, c, d, a, x[], S24, 0x8d2a4c8a); /* 32 */
HH (a, b, c, d, x[ ], S31, 0xfffa3942); /* 33 */
HH (d, a, b, c, x[ ], S32, 0x8771f681); /* 34 */
HH (c, d, a, b, x[], S33, 0x6d9d6122); /* 35 */
HH (b, c, d, a, x[], S34, 0xfde5380c); /* 36 */
HH (a, b, c, d, x[ ], S31, 0xa4beea44); /* 37 */
HH (d, a, b, c, x[ ], S32, 0x4bdecfa9); /* 38 */
HH (c, d, a, b, x[ ], S33, 0xf6bb4b60); /* 39 */
HH (b, c, d, a, x[], S34, 0xbebfbc70); /* 40 */
HH (a, b, c, d, x[], S31, 0x289b7ec6); /* 41 */
HH (d, a, b, c, x[ ], S32, 0xeaa127fa); /* 42 */
HH (c, d, a, b, x[ ], S33, 0xd4ef3085); /* 43 */
HH (b, c, d, a, x[ ], S34, 0x4881d05); /* 44 */
HH (a, b, c, d, x[ ], S31, 0xd9d4d039); /* 45 */
HH (d, a, b, c, x[], S32, 0xe6db99e5); /* 46 */
HH (c, d, a, b, x[], S33, 0x1fa27cf8); /* 47 */
HH (b, c, d, a, x[ ], S34, 0xc4ac5665); /* 48 */
II (a, b, c, d, x[ ], S41, 0xf4292244); /* 49 */
II (d, a, b, c, x[ ], S42, 0x432aff97); /* 50 */
II (c, d, a, b, x[], S43, 0xab9423a7); /* 51 */
II (b, c, d, a, x[ ], S44, 0xfc93a039); /* 52 */
II (a, b, c, d, x[], S41, 0x655b59c3); /* 53 */
II (d, a, b, c, x[ ], S42, 0x8f0ccc92); /* 54 */
II (c, d, a, b, x[], S43, 0xffeff47d); /* 55 */
II (b, c, d, a, x[ ], S44, 0x85845dd1); /* 56 */
II (a, b, c, d, x[ ], S41, 0x6fa87e4f); /* 57 */
II (d, a, b, c, x[], S42, 0xfe2ce6e0); /* 58 */
II (c, d, a, b, x[ ], S43, 0xa3014314); /* 59 */
II (b, c, d, a, x[], S44, 0x4e0811a1); /* 60 */
II (a, b, c, d, x[ ], S41, 0xf7537e82); /* 61 */
II (d, a, b, c, x[], S42, 0xbd3af235); /* 62 */
II (c, d, a, b, x[ ], S43, 0x2ad7d2bb); /* 63 */
II (b, c, d, a, x[ ], S44, 0xeb86d391); /* 64 */
state[] += a;
state[] += b;
state[] += c;
state[] += d;
memset ((POINTER)x, , sizeof (x));
} void MD5Init(MD5_CTX *context)
{
context->count[] = context->count[] = ;
context->state[] = 0x67452301;
context->state[] = 0xefcdab89;
context->state[] = 0x98badcfe;
context->state[] = 0x10325476;
} void MD5Update(MD5_CTX *context, unsigned char *input, unsigned int inputLen)
{
unsigned int i, index, partLen; index = (unsigned int)((context->count[] >> ) & 0x3F);
if ((context->count[] += ((UINT4)inputLen << )) < ((UINT4)inputLen << ))
context->count[]++;
context->count[] += ((UINT4)inputLen >> );
partLen = - index;
if (inputLen >= partLen)
{
memcpy((POINTER)&context->buffer[index], (POINTER)input, partLen);
MD5Transform(context->state, context->buffer); for (i = partLen; i + < inputLen; i += )
MD5Transform (context->state, &input[i]);
index = ;
}
else
{
i = ;
} memcpy((POINTER)&context->buffer[index], (POINTER)&input[i], inputLen-i);
} void MD5Final(unsigned char digest[], MD5_CTX *context)
{
unsigned char bits[];
unsigned int index, padLen; Encode (bits, context->count, );
index = (unsigned int)((context->count[] >> ) & 0x3f);
padLen = (index < ) ? ( - index) : ( - index);
MD5Update (context, PADDING, padLen);
MD5Update (context, bits, );
Encode (digest, context->state, );
memset ((POINTER)context, , sizeof (*context));
} void MD5Digest(char *pszInput, unsigned long nInputSize, char *pszOutPut)
{
MD5_CTX context;
unsigned int len = strlen (pszInput);
MD5Init (&context);
MD5Update (&context, (unsigned char *)pszInput, len);
MD5Final ((unsigned char *)pszOutPut, &context);
} char* MD5Buffer( const char *pszInput, UINT nInputSize )
{
char szDigest[];
char* szResult = (char*)malloc();
memset(szResult,,);
MD5_CTX context;
MD5Init (&context);
MD5Update (&context, (unsigned char *)pszInput, nInputSize);
MD5Final ((unsigned char *)szDigest, &context);
int i;
for (i=;i<;i++) sprintf (szResult+strlen(szResult),"%02X",(unsigned char)szDigest[i]);
return szResult;
}
char* testMd5()
{
char* conc = "StringBuilder sb = new StringBuilder(1024);StringBuilder sb = new StringBuilder(1024);StringBuilder sb = new StringBuilder(1024);StringBuilder sb = new StringBuilder(1024);";
char* p = (char*)malloc();
char* about = NULL;
int len = ;
memset(p,,);
strcat(p,conc);
strcat(p,conc);
strcat(p,conc);
strcat(p,conc);
strcat(p,conc);
strcat(p,conc);
strcat(p,conc);
strcat(p,conc);
len = strlen(p);
for (int i = ; i < ; i++ )
{
if(about)free(about);
about = MD5Buffer(p,len);
}
return about;
}
void main()
{
int starTicc = GetTickCount();
fibonacci();
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); starTicc = GetTickCount();
free(testMd5());
wPrint(L"testMd5 spend: %dms",GetTickCount() - starTicc);
}

这是Snapman页面:

两种代码的设计和实现方法完全一样,其运行结果对比:

C#执行结果:

Snapman执行结果:

结论:

1、函数执行C#要比Snapman慢一些

2、数字转换C#要比Snapman慢一倍多

3、字符串叠加C#使用了最高效的StringBuilder,执行速度和Snapman差不多

4、执行Md5算法,C#就要比Snapman慢了11倍

所以Snapman的脚本运行速度是非常快速的。

Snapman的主页:http://www.snapman.xyz

Snapman系统中TCC执行效率和C#执行效率对比的更多相关文章

  1. .net core 部署到windows上的方法与 系统中相关问题的解决

    前言 Net core 项目部门在Windows有很多种方式,大致有以下几种, dotnet 命令, iis(windowshosts), 一些开源的应用容器(docker ) 基于一些exe 程序, ...

  2. PowerShell因为在此系统中禁止执行脚本解决方法

    PowerShell因为在此系统中禁止执行脚本解决方法   在Powershell直接脚本时会出现: 无法加载文件 ******.ps1,因为在此系统中禁止执行脚本.有关详细信息,请参阅 " ...

  3. 1)实际时间(real time): 从command命令行开始执行到运行终止的消逝时间; 2)用户CPU时间(user CPU time): 命令执行完成花费的用户CPU时间,即命令在用户态中执行时间总和; 3)系统CPU时间(system CPU time): 命令执行完成花费的系统CPU时

    1)实际时间(real time): 从command命令行开始执行到运行终止的消逝时间: 2)用户CPU时间(user CPU time): 命令执行完成花费的用户CPU时间,即命令在用户态中执行时 ...

  4. 执行 vue inspect > output.js 报错,无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\vue.ps1,因为在此系统中禁止执行脚本

    无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\vue.ps1,因为在此系统中禁止执行脚本.有关详细信息,请参阅 "get-help ab ...

  5. 无法加载文件 **.ps1,系统中禁止执行脚本

    控制台执行命令后出现 无法加载文件 ******.ps1,因为在此系统中禁止执行脚本.有关详细信息,请参阅 "get-help about_signing" 在控制台执行命令: s ...

  6. 技术分析 | 浅谈在MySQL体系下SQL语句是如何在系统中执行的及可能遇到的问题

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 SQL语句大家并不陌生,但某种程度上来看,我们只是知道了这条语句是什么功能,它可 ...

  7. 李学斌:论复杂系统中的应用间协作V3

    说明 本文主要讨论了巨型复杂业务系统的一种构建思路,力图实现决策意志的快速.准确.一致的下传并简化实施成本提供实施效率.通过全业务领域的即时流程编排,实现全网业务IT系统的快速建设与迭代.本文所讲的方 ...

  8. LINUX系统中动态链接库的创建与使用

    大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不同,它里面的函数并不是执行程序本身的一部 ...

  9. LINUX系统中动态链接库的创建与使用{补充}

    大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不同,它里面的函数并不是执行程序本身的一部 ...

随机推荐

  1. leetcode-数组-子集

    一.题目描述 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums = [1,2,3] 输出: [ [3], [1], ...

  2. 255.Spring Boot+Spring Security:使用md5加密

    说明 (1)JDK版本:1.8 (2)Spring Boot 2.0.6 (3)Spring Security 5.0.9 (4)Spring Data JPA 2.0.11.RELEASE (5)h ...

  3. 【计算机篇】Office 2016 for Mac 安装和破解教程

    免责声明 请亲们支持正版.这教程旨在分享,供参考. 为啥写这篇文章 对于大多数使用 Mac 的用户而言,虽然有苹果自家的办公软件,但功能少,用起来不舒服.而 Offer 2016 版的需要登录激活购买 ...

  4. 【面试篇】资深招聘HR有哪些面试技巧?

    15年资深招聘HR总结的面试技巧     1.做一下自我介绍 了解应聘者的基本信息和工作经历 2.以往工作中您的职责是什么? 了解应聘者的相关工作经验和其系统性全面性 3.请讲一下您以往的工作经历. ...

  5. [Swift]LeetCode47. 全排列 II | Permutations II

    Given a collection of numbers that might contain duplicates, return all possible unique permutations ...

  6. [Swift]LeetCode321. 拼接最大数 | Create Maximum Number

    Given two arrays of length m and n with digits 0-9 representing two numbers. Create the maximum numb ...

  7. 【异常】Servlet.service() for servlet [springMvc] in context with path [/orderdishessystem] threw exception [Handler processing failed; nested exception is java.lang.NoClassDefFoundError: net/sf/ezmorph/M

    今天做登录的时候,引入json-lib-2.1-jdk15.jar的包时,执行到JSONObject jsonObject = new JSONObject()对象就报标题的那个错. 原来是除了要导入 ...

  8. Spring Boot 面试题

    1.列举一些SpringBoot特性 1.创建独立的Spring项目 2.内置Tomcat和Jetty容器 3.提供一个starter POMs来简化Maven配置 4.提供了一系列大型项目中常见的非 ...

  9. Filebeat 模块与配置

    续 • <开始使用Filebeat> 1.  关于Filebeat 当你要面对成百上千.甚至成千上万的服务器.虚拟机和容器生成的日志时,请告别 SSH 吧!Filebeat 将为你提供一种 ...

  10. 懵逼的this指向

    请看以下代码: 以上的console.log打印出来的,如果你能完全知道,请忽略,如果你不知道,那就接下来看吧. console.log打印的结果: Google非常智能地把对象给打印出来了,看结果, ...