【示例代码】 Tuple<T> Func<T>
using System;
using System.Math; namespace PiWithMonteCarlo
{
/// <summary>
/// Trivial, synchronous calculation algorithm
/// </summary>
public static class TrivialPiCalculator
{
public static double Calculate(int iterations)
{
int inCircle = ;
var random = new Random();
for (int i = ; i < iterations; i++)
{
var a = random.NextDouble();
var b = random.NextDouble(); // Strictly speaking, we do not need Sqrt here. We could simply drop it and still get the
// same result. However, this sample should demonstrate some perf topics, too. Therefore
// it stays there just so the program has to do some math.
#if LANG_EXPERIMENTAL
var c = Sqrt(a * a + b * b);
#else
var c = Math.Sqrt(a * a + b * b);
#endif
if (c <= )
{
inCircle++;
}
} return ((double)inCircle / iterations) * ;
}
}
} using System;
using System.Diagnostics; namespace PiWithMonteCarlo.TestDriver
{
class Program
{
static void Main(string[] args)
{
var iterations = * Environment.ProcessorCount; ExecuteAndPrint("Trivial PI Calculator", TrivialPiCalculator.Calculate, iterations);
ExecuteAndPrint("\n(Stupid) Parallel.For PI Calculator", ParallelForPiCalculator.Calculate, iterations);
ExecuteAndPrint("\nParallel.For PI Calculator", EnhancedParallelForPiCalculator.Calculate, iterations);
ExecuteAndPrint("\nPLinq PI Calculator", PlinqPiCalculator.Calculate, iterations);
ExecuteAndPrint("\nFast PI Calculator", FastPiCalculator.Calculate, iterations);
} private static void ExecuteAndPrint(string label, Func<int, double> calculation, int iterations)
{
Console.WriteLine(label);
PrintResult(Measure(() => calculation(iterations)), iterations);
} private static void PrintResult(Tuple<double, TimeSpan> r, int iterations)
{
Console.WriteLine(
"{0} ({1:#,##0.0000} sec for {2:#,##0} iterations = {3:#,##0.00} iter/sec)",
r.Item1,
r.Item2.TotalSeconds,
iterations,
iterations / r.Item2.TotalSeconds);
} private static Tuple<T, TimeSpan> Measure<T>(Func<T> body)
{
var watch = new Stopwatch();
watch.Start();
var result = body();
watch.Stop();
return new Tuple<T, TimeSpan>(result, watch.Elapsed);
}
}
}
更多地址
http://www.software-architects.com/devblog/2014/09/22/C-Parallel-and-Async-Programming
【示例代码】 Tuple<T> Func<T>的更多相关文章
- Swift常用语法示例代码(二)
此篇文章整理自我以前学习Swift时的一些练习代码,其存在的意义多是可以通过看示例代码更快地回忆Swift的主要语法. 如果你想系统学习Swift或者是Swift的初学者请绕路,感谢Github上Th ...
- Swift常用语法示例代码(一)
此篇文章整理自我以前学习Swift时的一些练习代码,其存在的意义多是可以通过看示例代码更快地回忆Swift的主要语法. 如果你想系统学习Swift或者是Swift的初学者请绕路,感谢Github上Th ...
- java对接申通下单接口示例代码
上面是控制台示例代码 public class Sample{ private final static String URL = "http://order.sto-express.cn: ...
- 浅谈C#中Tuple和Func的使用
为什么将Tuple和Func混合起来谈呢? 首先,介绍一下:Tuple叫做元组,是.Net Framwork4.0引入的数据类型,用来返回多个数值.在C# 4.0之前我们函数有多个返回值,通常是使用r ...
- python golang中grpc 使用示例代码详解
python 1.使用前准备,安装这三个库 pip install grpcio pip install protobuf pip install grpcio_tools 2.建立一个proto文件 ...
- 基于DotNetOpenAuth的OAuth实现示例代码: 获取access token
1. 场景 根据OAuth 2.0规范,该场景发生于下面的流程图中的(D)(E)节点,根据已经得到的authorization code获取access token. 2. 实现环境 DotNetOp ...
- 0038 Java学习笔记-多线程-传统线程间通信、Condition、阻塞队列、《疯狂Java讲义 第三版》进程间通信示例代码存在的一个问题
调用同步锁的wait().notify().notifyAll()进行线程通信 看这个经典的存取款问题,要求两个线程存款,两个线程取款,账户里有余额的时候只能取款,没余额的时候只能存款,存取款金额相同 ...
- ActiveMQ笔记(1):编译、安装、示例代码
一.编译 虽然ActiveMQ提供了发布版本,但是建议同学们自己下载源代码编译,以后万一有坑,还可以尝试自己改改源码. 1.1 https://github.com/apache/activemq/r ...
- C#微信公众平台接入示例代码
http://mp.weixin.qq.com/wiki/17/2d4265491f12608cd170a95559800f2d.html 这是微信公众平台提供的接入指南.官网只提供了php的示例代码 ...
- 编译opengl编程指南第八版示例代码通过
最近在编译opengl编程指南第八版的示例代码,如下 #include <iostream> #include "vgl.h" #include "LoadS ...
随机推荐
- dp之最长上升子序列
普通做法是O(n^2)下面介绍:最长上升子序列O(nlogn)算法(http://blog.csdn.net/shuangde800/article/details/7474903) /* HDU 1 ...
- Excel导出失败的提示
未处理System.InvalidCastException HResult=-2147467262 Message=无法将类型为“Microsoft.Office.Interop.Excel.App ...
- mybatis的一级缓存和二级缓存(1)
1.mybatis一级缓存,sqlSesion级别的缓存,一级缓存默认一直开启的,sqlSession级别的一个Map,把查询的数据放到一个Map中,以后需要相同的数据,直接从Map中去取 与数据库一 ...
- c#的逆向工程-IL指令集
一些 IL 语言解释: 跳转指令集合 Public field Static Beq 如果两个值相等,则将控制转移到目标指令. Public field Static Beq ...
- 自学Java测试代码二String, StringBuffer
2017-08-23 10:38:01 writer:pprp package test; import java.util.*; public class test2 { public static ...
- POJ3768 Katu Puzzle
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- .Net遍历窗体上控件
实现遍历窗体上的控件以及找出TextBox控件,代码如下: foreach( Control control in this.Controls ) { if( control is TextBox ) ...
- 利用python 模块读取csv文件信息
还有一个比较简单的方法 # -*- coding=utf-8 -*- import pandas as pddf = pd.read_csv("20170320094630.csv" ...
- HUST 1010 The Minimum Length (字符串最小循环节)
题意 有一个字符串A,一次次的重写A,会得到一个新的字符串AAAAAAAA.....,现在将这个字符串从中切去一部分得到一个字符串B.例如有一个字符串A="abcdefg".,复制 ...
- Highcharts 测量图;Highcharts 圆形进度条式测量图;Highcharts 时钟;Highcharts 双轴车速表;Highcharts 音量表(VU Meter)
Highcharts 测量图 配置 chart.type 配置 配置 chart 的 type 为 'gauge' .chart.type 描述了图表类型.默认值为 "line". ...