mono支持dotnet core了

mono支持.netcore了

  mono 4.8终于发正式版本了,新版本开始支持.net core了.

  2. 不直接安装,通过MSIExtractor.exe解压提取的方式
  3. 手动添加到系统环境Path变量中: F:\softwares\mono-4.8.0.495-x64-0\Mono\bin

测试并运行mono

mono -V
mono -V 查看mono版本

分别用.net core和mono对比一下性能

 先上图
.net core性能测试

mono性能测试

测试代码

ConsoleApp代码

using System;
using System.Text;

namespace ConsoleApp
{
    public class Program
    {
        //虽然.net core支持条件编译,但是无法区分是个环境运行
        //目前只能通过Mono.Runtime判断是否那个环境运行的
        public static bool isMono = Type.GetType("Mono.Runtime") != null;
        public static void Main(string[] args)
        {
            //.net core 输出中文,不指定环境的,会乱码
            if (!isMono)
            {
                Console.OutputEncoding = Encoding.UTF8;
            }

            StringConcat.test();

            Console.ReadKey();
        }
    }
}

StringConcat 测试工具类(宇内流云大哥做测试用的)

using System;
using System.Text;

namespace ConsoleApp
{
    class StringConcat
    {

        static long t = 0;
        static void TimeReset()
        {
            t = DateTime.Now.Ticks;
        }
        static long TT
        {
            get
            {
                return (DateTime.Now.Ticks - t) / 10000;
            }
        }

        public static void test()
        {
            string s1 = "sfdsfwefjwklefjlskdjflks2jgwdj;gkjr;ejdf;krej;gdkj;3rejg;kj2;ewkjf;kewj;fjwe;lkfj;wef";
            string s2 = "wfoiewhfw;eifodserg;erjg;ejg;kkjergjk;elrgjp3klerrkg;jergjlerjgjerlgj;;erg";
            string s3 = "l2efwhdslkfhwlrekg'3rgerljg;3ejgegrldmg'34e';g;rjemgm;3l,egl;kg'3';l4egm;dlmglermgemd;gmer';lgel;mgermg;f";
            const int c = 10000000;

            TimeReset();
            for (var i = 0; i < c; i++)
            {
                test1(s1, s2, s3);
            }
            Console.WriteLine("->字串加法用时:{0}ms", TT);


            TimeReset();
            for (var i = 0; i < c; i++)
            {
                test2(s1, s2, s3);
            }
            Console.WriteLine("->Format函数用时:{0}ms", TT);

            TimeReset();
            for (var i = 0; i < c; i++)
            {
                test3(s1, s2, s3);
            }
            Console.WriteLine("->StringBuilder用时:{0}ms", TT);

            TimeReset();
            for (var i = 0; i < c; i++)
            {
                test4(s1, s2, s3);
            }
            Console.WriteLine("->内存操作用时:{0}ms", TT);


            TimeReset();
            for (var i = 0; i < c; i++)
            {
                test5(s1, s2, s3);
            }
            Console.WriteLine("->string.Concat用时:{0}ms", TT);
        }


        static void test1(string s1, string s2, string s3)
        {
            var x = s1 + s2 + s3;
            var b = Encoding.ASCII.GetBytes(x);
        }

        static void test2(string s1, string s2, string s3)
        {
            var x = string.Format("{0}{1}{2}", s1, s2, s3);
            var b = Encoding.ASCII.GetBytes(x);
        }

        static void test3(string s1, string s2, string s3)
        {
            var sb = new StringBuilder();
            sb.Append(s1);
            sb.Append(s2);
            sb.Append(s3);
            var x = sb.ToString();
            var b = Encoding.ASCII.GetBytes(x);
        }

        static void test4(string s1, string s2, string s3)
        {
            var b1 = Encoding.ASCII.GetBytes(s1);
            var b2 = Encoding.ASCII.GetBytes(s2);
            var b3 = Encoding.ASCII.GetBytes(s3);
            var x = new byte[b1.Length + b2.Length + b3.Length];
            Buffer.BlockCopy(b1, 0, x, 0, b1.Length);
            Buffer.BlockCopy(b2, 0, x, b1.Length, b2.Length);
            Buffer.BlockCopy(b3, 0, x, b1.Length + b2.Length, b3.Length);
        }

        static void test5(string s1, string s2, string s3)
        {
            var x = string.Concat(s1, s2, s3);
            var b = Encoding.ASCII.GetBytes(x);
        }
    }
}
秋风 2017-02-27