Posts
ZeroBrane Studio - Installation
要進行 ZeroBrane Studio 的安裝,可到 ZeroBrane Studio 的下載頁面下載 ZeroBrane Studio 的主程式。
除了有不同的作業系統版本外,如果是 Windows 的程式,還有安裝包與壓縮包可供選擇,可適需求下載使用。
這邊筆者以壓縮包為例,將壓縮包下載下來,解壓縮運行 ZeroBrane Studio 主程式。
即可開始使用 ZeroBrane Studio。
Link ZeroBrane Studio - Lightweight IDE for your Lua needs
read morePosts
BenchmarkDotNet - Baseline
BenchmarkDotNet 如果要指定量測比較的標準,可在 BenchmarkAttribute 設定 Baseline 為 true,指定的量測方法即會被視為量測的標準,後續的量測則會跟該量測標準做比較。
像是下面這段程式:
using System.Threading; using BenchmarkDotNet.Attributes; ... public class ProgramBenchmarker { protected Program m_Program { get; set; } = new Program(); [Benchmark(Baseline = true)] public void Test1() { m_Program.Test(); Thread.Sleep(10); } [Benchmark] public void Test2() { m_Program.Test(); Thread.Sleep(20); } } 運行起來會看到設為基準的量測方法其 Scaled 值為 1,而另外一個量測方法其時間耗費大約為基準量測方法的兩倍,所以其 Scaled 值為 2。
read morePosts
BenchmarkDotNet - Params
使用 BenchmarkDotNet 時若需要設定欄位或是屬性的值,可以使用 ParamsAttribute 指定,像是下面這樣:
using BenchmarkDotNet.Attributes; ... public class ProgramBenchmarker { [Params(100, 200)] public int Parameter { get; set; } protected Program m_Program { get; set; } = new Program(); [Benchmark] public void Test() { m_Program.Test(); } } 運行時即會依序將指定的值帶入欄位或屬性下去量測。
read morePosts
BenchmarkDotNet - Exporters
Exporter 會將 benchmark 的結果輸出成不同的格式。
內建可使用的 Exporter 有:
HtmlExporter CsvExporter MarkdownExporter AsciiDocExporter CsvMeasurementsExporter PlainExporter JsonExporter 使用上只要透過 Attribue 掛上 benchmark 類別即可:
using BenchmarkDotNet.Attributes.Exporters; … [AsciiDocExporter] [CsvMeasurementsExporter] [PlainExporter] [JsonExporter] public class ProgramBenchmarker { … } 或是透過 config 的方式設定也可以。
using BenchmarkDotNet.Configs; using BenchmarkDotNet.Exporters; using BenchmarkDotNet.Exporters.Csv; using BenchmarkDotNet.Exporters.Json; … [Config(typeof(Config))] public class ProgramBenchmarker { private class Config : ManualConfig { public Config() { Add(AsciiDocExporter.Default); Add(CsvMeasurementsExporter.Default); Add(PlainExporter.Default); Add(JsonExporter.Default); } } … } HtmlExporter 的輸出會像這樣:
MarkdownExporter 的輸出會像這樣:
read morePosts
BenchmarkDotNet - Diagnosers
Diagnoser 可以附加到 benchmark 上,並獲取一些有用的資訊。像是內建的 MemoryDiagnoser 就可以幫我們獲取記憶體資訊。
使用上只要透過 Attribute 的方式加到要 benchmark 的類別即可。像是下面這樣:
using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Configs; using BenchmarkDotNet.Diagnosers; ... [MemoryDiagnoser] public class ProgramBenchmarker { ... } 或是透過 config 的方式設定也可以。
using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Configs; using BenchmarkDotNet.Diagnosers; ... [Config(typeof(Config))] public class ProgramBenchmarker { private class Config : ManualConfig { public Config() { Add(MemoryDiagnoser.Default); } } ... } 運行起來會看到多了 Allocated 欄位,顯示配置的記憶體量。
read morePosts
BenchmarkDotNet - Columns
BenchmarkDotNet 允許透過設定去變更 Summary Table 的 Column。
內建可使用的 Column 有:
NamespaceColumn MedianColumn MinColumn MaxColumn RankColumn 使用上只要透過 Attribue 掛上 benchmark 類別即可:
using BenchmarkDotNet.Attributes.Columns; … [NamespaceColumn] [MedianColumn] [MinColumn] [MaxColumn] [RankColumn] [RankColumn(NumeralSystem.Roman)] [OrderProvider(SummaryOrderPolicy.FastestToSlowest)] public class ProgramBenchmarker { … } 運行起來就會在 Summary Table 看到設定的欄位。
如果要加的欄位是未內建的,可透過 Config 與 TagColumn。像是這邊筆者想要加個 HashCode Column,其值為方法的 Hash 值,就可以像下面這樣撰寫:
using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Columns; using BenchmarkDotNet.Configs; … [Config(typeof(Config))] public class ProgramBenchmarker { private class Config : ManualConfig { public Config() { Add(new TagColumn("HashCode", item => item.
read morePosts
BenchmarkDotNet - Jobs
BenchmarkDotNet 的 Job 是用來描述 benchmark 是怎樣運行的。
內建的 Job 有:
DryJob ClrJob CoreJob MonoJob LegacyJitX86Job LegacyJitX64 RyuJitX64Job SimpleJob LongRunJob MediumRunJob ShortRunJob VeryLongRunJob Job 在使用上只要透過 Attribute 的方式加到要 benchmark 的類別即可。像是這邊想要跑短一點的 benchmark 就可以為 benchmark 類別加掛 ShortRunJobAttribute:
using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Attributes.Jobs; ... [ShortRunJob] public class ProgramBenchmarker { ... } 運行結果如下:
read morePosts
BenchmarkDotNet - Getting started
要使用 BenchmarkDotNet 去做 .NET 程式的 benchmark,可先透過 NuGet 安裝 BenchmarkDotNet 套件。
套件安裝好後進行 benchmark 程式的撰寫,撰寫方式只要寫個 benchmark 的方法,方法內去叫用要測的方法,最後在方法上面加上 BenchmarkAttribute 即可。
using BenchmarkDotNet.Attributes; … public class ProgramBenchmarker { protected Program m_Program { get; set; } = new Program(); [Benchmark] public void Test() { m_Program.Test(); } } … benchmark 程式寫好後撰寫 benchmark 運行的部份,只要透過 BenchmarkRunner.Run 帶入 benchmark 類別就可以了。
using BenchmarkDotNet.Running; … public class Program { static void Main(string[] args) { var summary = BenchmarkRunner.Run<ProgramBenchmarker>(); } public void Test() {… } } … } 完整的測試程式如下:
read morePosts
Visual Studio Code - Debug with Visual Studio Code
要用 Visual Studio Code 進行程式碼的除錯,可透過 Visual Studio Code 左側的工具列切換至除錯畫面。
接著在程式碼欲中斷的程式碼位置前方用滑鼠點擊設置中斷點。
再按下 Debug 按鈕即可開始進行程式碼的除錯。
在程式碼進行除錯時,Visual Studio Code 會帶出變數資訊、呼叫堆疊、中斷點的控制設定及工具列等。
如有自己想要查看的變數,可按下滑鼠右鍵,選取 Debug: Add to Watch 選單選項。
變數即會被加入 WATCH 視窗,便於後續查看。
read morePosts
Visual Studio Code - Install extensions
要安裝 Visual Studio Cdoe 的外掛套件,可按下熱鍵打開 Command Palette (Windows 為 Ctrl+ Shift + P, OS X 為 CMD + SHIFT + P),搜尋並運行 Extensions:Install Extensions。
或是直接透過左邊的工具列按鈕開啟 Extensions:Install Extensions。
接著搜尋欲安裝的外掛套件後按下 Install 按鈕。
選取的外掛套件即會開始進行安裝。
安裝完後按下 Reload 按鈕讓安裝的外掛套件生效。
再次按下 Reload Window 按鈕確認 Reload 即可。
read more