C#4.0 并行计算小试牛刀

随着计算机硬件的迅猛发展,多核处理器已经在日常生活中普遍应用,但是,现有的大部分计算机程序,对于多核处理器的使用率很低,一般都只利用了单核处理器的性能。在.Net4.0中,集成TPL(Task Parallel Library)和PLINQ(Parallel LINQ),这意味着我们可以应用C# 4.0实现并行化应用,在统一的工作调度程序下进行硬件的并行协调,这将大大提高应用程序的性能同时降低现存并发模型的复杂性,使计算机性能达到合理的应用效果。

那么,我们应用C#武器来开发并发环境下的感受,在System.Threading.Parallel 静态类提供了三个重要的方法For、Foreach、Invoke可以为我们小试牛刀:

这里我们使用如下判断一个数是否为质数的小程序进行测试:

        /// <summary>
        /// 判断一个数是否是质数
        /// </summary>
        /// <paramname="index"></param>
        static bool isZS(long index)
        {
            for (long i = 2; i < (index / 2) + 1; i++)
            {
                if(index % i == 0) return false;
            }
            returntrue;
        }


传统的串行算法如下:

            for(int i = 0; i < Max; i++)
            {
                isZS(i);
            }

并行算法如下:

            Parallel.For(0,Max,
                (i) => { isZS(i); });
 

在线程争用执行情况下,相同的操作在双核平台下运行,以StopWatch进行精确时间测试,在max值不同的情况下测试结果如下表所示,并行运算的魅力果然名不虚传。

Max串行算法(毫秒)并行算法(毫秒)
100012
100007648
10000056472922

可以看到在计算量大的情况下,并行运行的速度差不多是单线程的两倍,有部分时间消耗在了线程切换调度,但是在计算量小的情况下,由于线程切换耗时,反而造成并行计算耗时更多。在程序管理器中,可以看到对于双核CPU,串行算法只能利用50%左右CPU,而并行算法可以差不多使用100%,因此在程序中合理使用并行计算,可以提高多核计算器的CPU利用率。

 

  OQL.NET 是一套强类型的数据库对象查询语言 (OQL,Object Query Language),和 SQL 以及其它 OQL 不同的是,OQL.NET 基于宿主语言 (基于 C# 和 VB 等原生 .NET 语言而不是字符串)。OQL.NET 兼容 SQL-92 标准。   OQL.NET 对象查询语言具有良好的设计,无需安装插件,您就能在 IDE 中编写 OQL 时获得严谨而正确的上下文帮助。OQL.NET 对象查询语言能一步一步地引导用户写出正确的、具有兼容性的数据库查询语句。   OQL.NET 是完全面向对象的、强类型的数据库查询语言,您编写的 OQL 查询语句随着您的应用程序一起编译。这样,OQL.NET 对象查询语言使您能在编译时发现数据库查询语句的错误,而不是延迟到运行时才进行艰难的除错工作。当数据库的架构改变时,通过(使用Macrobject CodeAuto 等代码生成工具)重新生成查询类代码,再次编译应用程序时,通过编译错误便能发现需要修改的 OQL 语句。   OQL.NET 对象查询语言支持多种数据库,在切换数据库时,无需变更源代码,也无需重新编译。   使用 OQL.NET 对象查询语言能降低 80% 以上的查询语句编写时间,减少 95% 的查询语句调试时间,并且不会带来任何性能损失,同时提高系统的可靠性(一个没有错误查询语句的应用程序)。   使用 OQL.NET 对象查询语言,您可以将一个数据库架构划分为多个子架构,便于进行业务和应用的划分。OQL.NET 对象查询语言提供的映射机制也能够让开发人员为数据对象及其属性重新命名,这样开发人员就可以采用更加易懂易记的名称,使代码更具可读性。   OQL.NET 对象查询语言采用的级联表达式以及基于宿主语言的中缀表达式写法具有很好的可读性,可以和原始 SQL 语句相媲美。并且 OQL.NET 对象查询语言支持将很长的查询语句分开来写,将其公用部分拆解出来,十分类似于功能分解的重构功能(如抽子函数),这样更易读更易维护。 ??OQL.NET 对象查询语言同时支持对象表达式,可以大大简化查询语句的编写。OQL.NET 对象查询语言生成的 SQL 语句不但严谨,并且格式良好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值