Snapman系统中TCC执行效率和C#执行效率对比

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

时间: 2024-10-08 08:32:31

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

Android 系统中,那些能大幅提高工作效率的 API 汇总(持续更新中...)

前言 "条条大路通罗马."工作中,实现某个需求的方式往往不是唯一的,这些不同实现方式不仅表现在代码质量上,还影响着我们的工作效率.就像,在 Android 系统中,总有那么一些鲜为人知的 API 能够减少我们很多零碎的工作量.于是,就想凭着一些经验,整理一些常用的,找个地方归纳总结,也供日后翻阅. getResources().getIdentifier(String name, String defType, String defPackage) 根据资源名称获取资源 id.正常情况

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

PowerShell因为在此系统中禁止执行脚本解决方法 在Powershell直接脚本时会出现: 无法加载文件 ******.ps1,因为在此系统中禁止执行脚本.有关详细信息,请参阅 "get-help about_signing". 所在位置 行:1 字符: 17 + E:\Test\test.ps1 <<<<     + CategoryInfo          : NotSpecified: (:) [], PSSecurityException    

powershell-无法加载文件,因为在此系统中禁止执行脚本

写了一个powershell脚本测试脚本,结果执行的时候报错 $a=Get-Content C:\script.txt | select-string -pattern "ora"     if ( $a -eq  $null )     {                 write-host "error"      }     else     {          write-host "OK"      }  PS D:\> .\

vmware vsphere powercli 因为在此系统中禁止执行脚本

打开 VMware vSphere PowerCLI 出现 无法加载文件 C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1,因为在此系统中禁止执行脚本.有关详细信息,请参阅 "get-help about_signing".所在位置 行:1 字符: 2+ . <<<<  "C:\Program

PowerShell 无法加载文件ps1,因为在此系统中禁止执行脚本

直接运行powershell时提示“无法加载文件ps1,因为在此系统中禁止执行脚本.有关详细信息,请参阅 "get-help about_signing". 主要是由于没有权限执行脚本. 运行get-help about_signing 提示了解执行策略输入 get-executionpolicy 显示 Restricted 即不允许执行任何脚本. 通过命令 get-help set-executionpolicy 可知有以下执行策略:<Unrestricted> | &l

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

大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不同,它里面的函数并不是执行程序本身的一部分,而是根据执行程序需要按需装入,同时其执行代码可在多个执行程序间共享,节省了空间,提高了效率,具备很高的灵活性,得到越来越多程序员和用户的青睐.那么,在LINUX系统中有无这样的函数库呢? 答案是肯定的,LINUX的动态链接库不仅有,而且为数不少.在/lib目录下,就有许多以.so作后缀的文件,这

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

大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不同,它里面的函数并不是执行程序本身的一部分,而是根据执行程序需要按需装入,同时其执行代码可在多个执行程序间共享,节省了空间,提高了效率,具备很高的灵活性,得到越来越多程序员和用户的青睐.那么,在LINUX系统中有无这样的函数库呢? 答案是肯定的,LINUX的动态链接库不仅有,而且为数不少.在/lib目录下,就有许多以.so作后缀的文件,这

基于ARM核AT75C220在指纹识别系统中应用

纹识别技术近年来逐渐成熟,在门禁.安防和金融等方面得到了越来越广泛的应用.典型的指纹识别系统是以指纹传感器和DSP处理器为核心构成.指纹传感器采集指纹图像,DSP处理器实时实现指纹识别算法.同时,通常的指纹识别系统还具有较强的通信能力,除了具有RS485通信外,高档的指纹识别系统还要求具有以太网接口和Internet连接能力.Atmel公司新推出的智能互联网芯片AT75C220集成了ARM内核.DSP协处理器以及以太网MAC接口,用AT75C220和指纹传感器结合可构成高性能的指纹识别系统. 1

OpenGL------在Windows系统中显示文字

增加了两个文件,showline.c, showtext.c.分别为第二个和第三个示例程序的main函数相关部分.在ctbuf.h和textarea.h最开头部分增加了一句#include <stdlib.h>附件中一共有三个示例程序:第一个,飘动的“曹”字旗.代码为:flag.c, GLee.c, GLee.h第二个,带缓冲的显示文字.代码为:showline.c, ctbuf.c, ctbuf.h, GLee.c, GLee.h第三个,显示歌词.代码为:showtext.c, ctbuf.