国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

詳解F#版本的CodeTimer方法實現

開發 后端
在這里我們將介紹F#版本的CodeTimer方法實現,這一方法在C#中已經廣泛使用了,希望本文對大家有所幫助。

對于F#這個微軟的新丁,很多人并不熟悉。很多開發人員知道函數式編程方面Scala可以算一個,但是不知道F#中CodeTimer妙用。本文借用作者的文章,希望能讓大家對F#有更深刻的了解。

#T#

CodeTimer很好用,自從在今年三月在.NET技術大會上看到Jeffrey Richter用類似的東西之后,我就自己寫了一個。不過,當時是用C#寫的,現在我需要在F#里做相同的事情就不那么方便了。當然,F#與.NET本是無縫集成,因此C#寫的CodeTimer也應該可以被F#使用。不過,我平時在使用CodeTimer時并不是通過程序集引用,而是使用代碼復制的方式,因此如果有個F#版本那么應該使用起來更加方便。

代碼如下:

  1. #light  
  2. module CodeTimer  
  3. open System  
  4. open System.Diagnostics  
  5. open System.Threading  
  6. open System.Runtime.InteropServices  
  7.  
  8. [<DllImport("kernel32.dll")>]  
  9. extern int QueryThreadCycleTime(IntPtr threadHandle, uint64* cycleTime)  
  10.  
  11. [<DllImport("kernel32.dll")>]  
  12. extern IntPtr GetCurrentThread();  
  13.  
  14. let private getCycleCount() =   
  15.     let mutable cycle = 0UL  
  16.     let threadHandle = GetCurrentThread()  
  17.     QueryThreadCycleTime(threadHandle, &&cycle) |> ignore  
  18.     cycle  
  19.  
  20. let time name iteration action =  
  21.  
  22.     if (String.IsNullOrEmpty(name)) then ignore 0 else 
  23.  
  24.     // keep current color  
  25.     let currentForeColor = Console.ForegroundColor  
  26.     Console.ForegroundColor <- ConsoleColor.Yellow  
  27.     printfn "%s" name  
  28.  
  29.     // keep current gc count  
  30.     GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);  
  31.     let gcCounts =  
  32.         [0 .. GC.MaxGeneration]  
  33.         |> List.map (fun i -> (i, GC.CollectionCount(i)))  
  34.         |> List.fold (fun acc i -> i :: acc) []  
  35.         |> List.rev  
  36.  
  37.     // keep cycle count and start watch  
  38.     let threadPtr = GetCurrentThread()  
  39.     let cycle = getCycleCount()  
  40.     let watch = Stopwatch.StartNew()  
  41.       
  42.     // run  
  43.     for i = 1 to iteration do action();  
  44.       
  45.     let cycleUsed = getCycleCount() - cycle  
  46.     watch.Stop()  
  47.  
  48.     // restore the color  
  49.     Console.ForegroundColor <- currentForeColor;  
  50.  
  51.     // print  
  52.     watch.ElapsedMilliseconds.ToString("N0") |> printfn "\tTime Elapsed:\t%sms" 
  53.     cycle.ToString("N0") |> printfn "\tCPU Cycles:\t%s" 
  54.     gcCounts |> List.iter (fun (i, c) ->   
  55.         printfn "\tGen%i:\t\t%i" i (GC.CollectionCount(i) - c))  
  56.  
  57.     printfn "" 
  58.  
  59. let initialize() =  
  60.     Process.GetCurrentProcess().PriorityClass <- ProcessPriorityClass.High  
  61.     Thread.CurrentThread.Priority <- ThreadPriority.Highest  
  62.     time "" 0 (fun() -> ignore 0) 

結果是:

  1. Wait  
  2.         Time Elapsed:   684ms  
  3.         CPU Cycles:     372,709,908  
  4.         Gen0:           0  
  5.         Gen1:           0  
  6.         Gen2:           0 

與C#版本的CodeTimer相比,第一版的F# CodeTimer少算了CPU使用周期的消耗——不是我不想,而是遇到了問題。我當時這樣引入P/Invoke的簽名:

  1. open System.Runtime.InteropServices  
  2. [<DllImport("kernel32.dll")>]  
  3. extern int QueryThreadCycleTime(IntPtr threadHandle, uint32* cycleTime)  
  4. [<DllImport("kernel32.dll")>]  
  5. extern IntPtr GetCurrentThread(); 

F#在P/Invoke簽名中使用*來標記out參數,但是在自定義方法時使用的是byref,這點與C#不同,后者都是使用ref。這個引入看似沒有問題,而且普通調用也能得到正常結果:

  1. [<EntryPoint>]  
  2. let main args =  
  3.  
  4.     let mutable cycle = 0u 
  5.     let threadHandle = CodeTimer.GetCurrentThread()  
  6.     CodeTimer.QueryThreadCycleTime(threadHandle, &&cycle) |> ignore  
  7.  
  8.     Console.ReadLine() |> ignore  
  9.     0 

但是,一旦我把它加為CodeTimer的一個方法,如getCycleCount:

  1. let getCycleCount() =   
  2.     let mutable cycle = 0u  
  3.     let threadHandle = GetCurrentThread()  
  4.     QueryThreadCycleTime(threadHandle, &&cycle) |> ignore  
  5.     cycle 

這樣調用的時候就會拋出異常:

拋出異常

后經alonesail同學指出,引入QueryThreadCycleTime的時候,第二個參數應該是64位而不是32位無符號整數——我將PULONG64看作PULONG了。改成uint64便沒有問題了。

原文標題:F#版本的CodeTimer(已支持CPU時鐘周期統計)

鏈接:http://www.cnblogs.com/JeffreyZhao/archive/2009/11/13/fsharp-codetimer.html

責任編輯:彭凡 來源: 博客園
相關推薦

2010-01-04 09:40:46

F#對象

2010-04-07 16:51:59

F#

2010-01-26 08:25:06

F#語法F#教程

2009-08-19 09:42:34

F#并行排序算法

2010-01-07 10:04:18

F#函數式編程

2010-03-16 09:09:04

F#

2011-08-01 16:24:04

XCode CodeTimer 測試

2010-01-15 08:33:13

F#F#類型推斷F#教程

2010-04-07 09:46:05

2010-03-26 19:22:08

F#代理

2010-08-16 16:12:58

F#

2011-06-09 09:52:41

F#

2009-08-13 17:39:48

F#數據類型Discriminat

2010-03-08 09:17:13

F#異步

2009-09-10 14:18:59

Functional F#

2012-03-12 12:34:02

JavaF#

2009-12-14 09:04:10

F#運算符

2009-12-04 09:16:44

Visual Stud

2012-11-06 10:01:35

ContinuatioF#

2019-07-11 08:00:00

JavaScriptJulia編程語言
點贊
收藏

51CTO技術棧公眾號

xvideos成人免费中文版| 午夜精品区一区二区三| 成人女同在线观看| 综合色天天鬼久久鬼色| www插插插无码免费视频网站| 国产综合网站| 国产精品啪视频| 九色丨蝌蚪丨成人| 欧美精品免费在线| 日韩毛片网站| 神马国产精品影院av| 精品国产免费人成网站| 精品国产乱码久久久久久久久| 国产二区视频在线观看| 色偷偷久久人人79超碰人人澡| 91福利免费| 国产精品女主播在线观看| 国产综合av在线| 97久久精品人人爽人人爽蜜臀 | 国产福利在线| 综合av第一页| avav在线看| 国产91丝袜在线播放0| 亚洲欧洲另类精品久久综合| 中文亚洲免费| 欧美性天天影院| 99伊人成综合| 欧美亚洲免费在线| 久久午夜影视| 亚洲看片网站| 视频一区视频二区在线观看| 五月天亚洲综合情| 性色av一区二区怡红| 日韩视频精品| 久久亚洲风情| 国产精品免费小视频| 亚洲人成免费网站| 国产精品国语对白| 成人区精品一区二区婷婷| 91久久综合亚洲鲁鲁五月天| 亚洲茄子视频| 日本在线观看一区二区| 欧美精品97| 亚洲精品在线视频观看| 99久久精品免费观看| 毛片av免费在线观看| 99久久久精品| 可以看美女隐私的网站| 亚洲国产精品久久不卡毛片| 成人狠狠色综合| 色综合天天视频在线观看| 黄色在线免费网站| 精品国产不卡一区二区三区| 成人性生交大片免费看网站 | 国内在线免费视频| 亚洲欧洲日产国产网站| 91精品导航| 亚洲影院污污.| 国产婷婷视频在线| 日韩电影免费观看在线观看| 久久成人福利| 国产精品v欧美精品∨日韩| 美国一级片在线免费观看视频 | 久久wwww| 91在线播放国产| 毛片av一区二区| 成人拍拍拍免费视频网站| 欧美日本韩国一区| 日本一区二区三区视频在线看| www日韩av| www.日本不卡| 国产在线资源| 久热爱精品视频线路一| 电影天堂最新网址| 91搞黄在线观看| 无遮挡在线观看| 国产精品视频久久| 丁香激情综合国产| 中文字幕在线观| 精品国产一区二区三区久久久狼 | 久久国产精品免费| 超碰在线公开超碰在线| 亚洲国产精品久久| 在线观看免费成人av| 国产成人自拍视频在线观看| 美女国产一区| 99不卡视频| 亚洲国产成人一区| 三上亚洲一区二区| 欧美女人性生活视频| 91久久久免费一区二区| 成人台湾亚洲精品一区二区 | 今天的高清视频免费播放成人| 欧美日韩一区二区三| 国产精品久久久久国产精品日日| 性xxxxfjsxxxxx欧美| 欧洲日本亚洲国产区| 国产精品18久久久久久久久 | 久久久久久久久久久久久久一区 | 电影网一区二区| 亚洲一区二区三区在线视频| 久久久久久免费毛片精品| 欧美hdxxxx| 99在线看视频| 一区av在线播放| 欧美成人精品午夜一区二区| 亚洲欧美日韩在线综合| 精品视频一区二区三区免费| 国产永久精品大片wwwapp| 精品播放一区二区| 婷婷综合一区| 青青在线视频免费| 亚洲性av在线| 六月天综合网| 成人欧美亚洲| 91精品在线国产| 亚洲国产日日夜夜| 欧美极品中文字幕| 免费观看成人网| 久久精品国产亚洲| 激情丁香综合五月| 免费在线国产视频| 鲁丝一区二区三区免费| 色婷婷综合久久久久中文一区二区 | 日韩中文视频免费在线观看| 毛片一区二区| 1pondo在线播放免费| 成人疯狂猛交xxx| 亚洲高清一区二区三区| 要久久爱电视剧全集完整观看| 国产又粗又长又大的视频| 草民午夜欧美限制a级福利片| 黄网站视频在线观看| 亚洲一区二区三区久久| 亚洲电影第三页| 久久国产成人午夜av影院宅| 2222www色视频在线观看| 国产精品aaaa| 五月激情六月综合| 亚洲女同另类| 欧美成人hd| 国产手机精品在线| 51精品视频一区二区三区| 欧美va天堂在线| 91久久精品美女高潮| 中文字幕在线播放不卡一区| 亚欧日韩另类中文欧美| 日本午夜激情视频| 久久久久久中文| 亚洲精品欧美综合四区| 欧美残忍xxxx极端| 在线观看a视频| 亚洲精品一卡二卡三卡四卡| 国产亚洲美女久久| 中文字幕精品综合| 99久久www免费| 黄a在线观看| 日本熟妇人妻xxxx| 久久久999国产| 国模私拍国内精品国内av| 成人久久久久久久久| 日本中文字幕不卡免费| 亚洲亚洲精品在线观看| 亚洲精品男同| 色综合一本到久久亚洲91| 91激情视频在线| 国产日韩专区在线| 欧美电影精品一区二区| 91色porny蝌蚪| 99久久99久久精品国产片桃花| 米奇精品一区二区三区| 精品国产sm最大网站免费看| 国产成人亚洲综合a∨猫咪| 精品久久ai| 91福利在线视频| 午夜久久久久久久久久久| 另类色图亚洲色图| 亚洲h动漫在线| 蜜桃久久久久久久| 99久久香蕉| 久草中文在线| 99视频免费播放| 精品人伦一区二区三区| 日韩在线精品一区| 欧美性猛交xxxx黑人猛交| 国产精品综合网| 日韩国产在线| 成人欧美一区二区| 亚洲精品网址在线观看| 亚洲精品乱码久久久久久黑人| 国产精品视区| 亚洲性视频在线| 老司机精品影院| 国产九九热视频| 欧美亚洲另类久久综合| 欧美一级电影免费在线观看| 亚洲精品国精品久久99热| 亚洲国产精品久久艾草纯爱| 成人午夜激情影院| 国产欧美一区二区色老头|