zoukankan      html  css  js  c++  java
  • C#调用 F# 及简单性能对比

     

    C#调用 F# 及简单性能对比

     

    VS2010里已经集成了F#F#本身是函数型的编程语言,在数学运算方面具备天生的优越性,下面说明如何在C#中调用F#,并简单的从纯语法的角度来比较一下性能。

    1.        建立一个F#

    height=421

    2.        F#的原文件中添加一个Module(一定要添加哦,不然在C#中是无法调用的!),然后在这个Module中添加一个Swap函数。代码如下:

     

    module FSModule

    let Swap(a,b)=(b,a)

     

    看习惯了C风格代码的程序员,再来看这段F#代码可能会感觉语法有怪异,但是真的挺简洁的。

    3.        建立一个C#的应用程序,并添加这个F#库的引用

    4.        C#的应用程序里添加一个C风格版本的Swap方法,代码如下:

    public static  Tuple<int, int> Swap(int a, int b)

            {

                return new Tuple<int, int>(b,a);

            }

    注意这里返回的类型是C#4.0里新增加的Tuple类型,可以简单把它理解成一个数组类型。另外之所以将该方法定义为静态的,是因为F# Module里的函数也会被编译成静态的。

    5.        下面编写一个测试代码,来比较一下两个版本的Swap方法的速度,代码如下:

    private void button1_Click(object sender, EventArgs e)

            {

                //F#

                var start = DateTime.Now;

                Tuple <int,int >result=null ;

                for (int i = 0; i < 1000; i++)

                {

                    result=FSModule.Swap(1, 2);

                }

                var span = DateTime.Now - start;

                this.listBox1.Items.Add("F#"+span .TotalMilliseconds );

     

     

                //C#

                start = DateTime.Now;

                result = null;

                for (int i = 0; i < 1000; i++)

                {

                    result = Swap(1, 2);

                }

                span = DateTime.Now - start;

                this.listBox1.Items.Add("C#" + span.TotalMilliseconds);

            }

    6.        C#以及F#的编译选项如下:

    C#

    F#

    height=94

    height=118

     

    7.        先分别调用10000次,然后增加循环次数,再进行比较,比较结果如下:

    循环次数

    F#时间(ms

    C#时间(ms)

    说明

    1000

    0.15

    0.03

     

    10000

    0.32

    0.38

    次平均值

    100000

    2.19

    2.08

    次平均值

    1000000

    16.60

    17.26

    次平均值

    10000000

    179.08

    185.54

    次平均值

    8.        测试结论

    经过测试发现,虽然因为语法结构的不同,但是最终都被编译成IL所以执行效率基本上差不多,其实C#Swap函数的编写,是根据Reflector反编译F# DLL之后得到的。如何大家需要技术支援,请给我发Email:warensoft@foxmail.com


    如何大家需要技术支援,请给我发Email:warensoft@foxmail.com

  • 相关阅读:
    cassandra安装
    002 spring boot框架,引入mybatis-generator插件,自动生成Mapper和Entity
    033 SSM综合练习09--数据后台管理系统--基于AOP的日志处理
    032 SSM综合练习08--数据后台管理系统--jsp页面显示当前用户名
    031 SSM综合练习07--数据后台管理系统--用户详情查询
    030 SSM综合练习06--数据后台管理系统--SSM权限操作及Spring Security入门
    029 SSM综合练习05--数据后台管理系统--订单分页查询
    027 SSM综合练习03--数据后台管理系统--product-list.jsp和main.jsp页面制作
    Idea 目录结构下有红色波浪线
    virtualbox上,android x86 的分辨率的设置
  • 原文地址:https://www.cnblogs.com/warensoft/p/1682387.html
Copyright © 2011-2022 走看看