博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Rust初步(五):Rust与C#性能比较
阅读量:6706 次
发布时间:2019-06-25

本文共 1834 字,大约阅读时间需要 6 分钟。

我学习Rust的目的并不是说期望用它来取代掉现有的开发平台或语言。相反,我认为当前绝大部分研发团队,都不可能只用一个平台或者一个语言。

当组织增长,他们越来越依赖大量的编程语言。不同的编程语言有不同的能力和弱点,而一个多语言栈让你在某个特定的编程语言的优点起作用的时候能使用它,当它有缺陷时使用其他编程语言。

Rust 主要擅长的领域是:数值计算和线程。

我下面用一个实例来比较一下Rust和C#的性能方面表现。这个实例很简单,我们准备开启10个线程,然后在每个线程里面运行一个数值累加的工作任务(500万次。

注意,以下测试的耗时,可能在各位的电脑上面会因为配置的不同而不同。我的配置如下

Rust的程序

extern crate time;use std::thread;use time::*;fn main(){    let start = time::now();//获取开始时间    let handles :Vec<_> =(0..10).map(|_|{        thread::spawn(||{            let mut x= 0;            for _ in (0..5_000_000){                x+=1            }            x        })    }).collect();    for h in handles{        println!("Thread finished with count={}",h.join().map_err(|_| "Could not join a thread!").unwrap());    }    let end = time::now();//获取结束时间    let duration = end - start;    println!("耗时:{}",duration);}

 

需要注意的是,为了做耗时统计,我们采用了time这个crate,如果有不清楚,请参考我之前的文章:

 

这个程序,在debug模式下运行的耗时大约是 0.55秒

在release模式下运行的耗时大约是 0.002秒

 

C#的程序:

using System;using System.Threading.Tasks;using System.Diagnostics;using System.Threading;namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {            Stopwatch watch = new Stopwatch();            watch.Start();            Parallel.For(0, 10, i =>            {                var x = 0;                for (int j = 0;  j< 5000000; j++)                {                    x += 1;                }                Console.WriteLine("线程:{0} 完成计数",Thread.CurrentThread.ManagedThreadId);            });            watch.Stop();            Console.WriteLine("耗时:{0}秒", watch.Elapsed.TotalSeconds);            Console.Read();        }    }}

 

在Debug模式下面运行的耗时约为0.06秒

在Release模式下运行的耗时约为0.012秒

 

汇总下来比较的结果如下

应该说C#新版本中对多线程管理是有了很大的提升的(包括语法很简化)。在Release模式下还是比较慢,是因为Rust是没有运行时的,而C#是要经过CLR运行的。

不过,在Debug模式下,居然C#大幅度胜出了,我感到很意外。从数值上来说,只能说Rust在Debug模式下很慢(可能做了很多事情?)

转载地址:http://pcflo.baihongyu.com/

你可能感兴趣的文章
Windows server 2008 Hyper-v下,玩转office communicator Server 2007 Enterprise
查看>>
Agent监控软件在IT工作中的应用
查看>>
Silverlight + WCF错误“The remote server returned an error: NotFound.”的解决方法
查看>>
内核调优记录file-max
查看>>
stream 实现异构数据表的传输
查看>>
机器视觉系统设计数字相机与模拟相机的优势比较
查看>>
RHEL 5基础篇—linux的简介
查看>>
Windows Server 2008 R2之五操作主控的管理
查看>>
java.lang.UnsupportedClassVersionError: Bad version number in .class file
查看>>
grub启动引导装载程序总结。
查看>>
XIV(3)--Read/Write Operations
查看>>
route OS(MikroTik)2.9.27初探
查看>>
tomcat配置优化
查看>>
[转]Javascript 中 String.replace( ) 的妙用
查看>>
分布式系统开发的一些相关理论基础——CAP、ACID、BASE
查看>>
探讨防火墙内核监听模式:ISA2006系列之十六
查看>>
android滑动一个路线后 人物图片按此路线移动的实现
查看>>
【电信增值业务学习笔记】9基于智能网的增值业务实现技术和应用
查看>>
Winform文件下载之WebClient
查看>>
【REACT NATIVE 系列教程之六】重写SHOULDCOMPONENTUPDATE指定组件是否进行重绘
查看>>