{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "运行 BenchmarkDotnet 基准测试\n", "============================" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "在多语言笔记中,可以很方便的使用 BenchmarkDotnet 进行基准测试。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 使用步骤" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### 1. 安装 BenchmarkDotNet 包" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "dotnet_interactive": { "language": "csharp" }, "polyglot_notebook": { "kernelName": "csharp" } }, "outputs": [ { "data": { "text/html": [ "
Restore sources
Installed Packages
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "// 默认包源\n", "#i \"nuget:https://api.nuget.org/v3/index.json\"\n", "\n", "#r \"nuget: BenchmarkDotNet, 0.13.12\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.编写基准测试类" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "定义包含 [Benchmark] 属性的测试方法" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "polyglot_notebook": { "kernelName": "csharp" } }, "outputs": [], "source": [ "using BenchmarkDotNet.Attributes;\n", "using BenchmarkDotNet.Running;\n", "\n", "public class MyBenchmarks\n", "{\n", " [Benchmark]\n", " public void TestMethod()\n", " {\n", " // 待测试的性能代码\n", " }\n", "}\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3. 运行基准测试" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "在笔记中调用 BenchmarkRunner,需显式指定配置(如 Release 模式):" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "polyglot_notebook": { "kernelName": "csharp" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b]9;4;3;0\u001b\\// Validating benchmarks:\n", "// * No exporters defined, results will not be persisted.\n", "\n", "// ***** BenchmarkRunner: Start *****\n", "// ***** Found 1 benchmark(s) in total *****\n", "// ***** Building 1 exe(s) in Parallel: Start *****\n", "// ***** Done, took 00:00:00 (0 sec) *****\n", "// Found 1 benchmarks:\n", "// MyBenchmarks.TestMethod: Job-LIUZPN(Toolchain=InProcessEmitToolchain)\n", "\n", "Setup power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)\n", "// **************************\n", "// Benchmark: MyBenchmarks.TestMethod: Job-LIUZPN(Toolchain=InProcessEmitToolchain)\n", "// *** Execute ***\n", "// Launch: 1 / 1\n", "\n", "// Benchmark Process Environment Information:\n", "// BenchmarkDotNet v0.13.12\n", "// Runtime=.NET 9.0.4 (9.0.425.16305), X64 RyuJIT AVX2\n", "// GC=Concurrent Server\n", "// HardwareIntrinsics=AVX2,AES,BMI1,BMI2,FMA,LZCNT,PCLMUL,POPCNT VectorSize=256\n", "// Job: Job-LIUZPN(Toolchain=InProcessEmitToolchain)\n", "\n", "OverheadJitting 1: 1 op, 381100.00 ns, 381.1000 us/op\n", "WorkloadJitting 1: 1 op, 531000.00 ns, 531.0000 us/op\n", "\n", "OverheadJitting 2: 16 op, 483900.00 ns, 30.2437 us/op\n", "WorkloadJitting 2: 16 op, 985900.00 ns, 61.6187 us/op\n", "\n", "WorkloadPilot 1: 16 op, 14400.00 ns, 900.0000 ns/op\n", "WorkloadPilot 2: 32 op, 6000.00 ns, 187.5000 ns/op\n", "WorkloadPilot 3: 64 op, 5900.00 ns, 92.1875 ns/op\n", "WorkloadPilot 4: 128 op, 2600.00 ns, 20.3125 ns/op\n", "WorkloadPilot 5: 256 op, 3500.00 ns, 13.6719 ns/op\n", "WorkloadPilot 6: 512 op, 7300.00 ns, 14.2578 ns/op\n", "WorkloadPilot 7: 1024 op, 11300.00 ns, 11.0352 ns/op\n", "WorkloadPilot 8: 2048 op, 20900.00 ns, 10.2051 ns/op\n", "WorkloadPilot 9: 4096 op, 25200.00 ns, 6.1523 ns/op\n", "WorkloadPilot 10: 8192 op, 38900.00 ns, 4.7485 ns/op\n", "WorkloadPilot 11: 16384 op, 99500.00 ns, 6.0730 ns/op\n", "WorkloadPilot 12: 32768 op, 203900.00 ns, 6.2225 ns/op\n", "WorkloadPilot 13: 65536 op, 284400.00 ns, 4.3396 ns/op\n", "WorkloadPilot 14: 131072 op, 503100.00 ns, 3.8383 ns/op\n", "WorkloadPilot 15: 262144 op, 1037600.00 ns, 3.9581 ns/op\n", "WorkloadPilot 16: 524288 op, 2141100.00 ns, 4.0838 ns/op\n", "WorkloadPilot 17: 1048576 op, 5614900.00 ns, 5.3548 ns/op\n", "WorkloadPilot 18: 2097152 op, 9530900.00 ns, 4.5447 ns/op\n", "WorkloadPilot 19: 4194304 op, 16251500.00 ns, 3.8747 ns/op\n", "WorkloadPilot 20: 8388608 op, 31093100.00 ns, 3.7066 ns/op\n", "WorkloadPilot 21: 16777216 op, 69916600.00 ns, 4.1674 ns/op\n", "WorkloadPilot 22: 33554432 op, 104092200.00 ns, 3.1022 ns/op\n", "WorkloadPilot 23: 67108864 op, 204056800.00 ns, 3.0407 ns/op\n", "WorkloadPilot 24: 134217728 op, 416212900.00 ns, 3.1010 ns/op\n", "WorkloadPilot 25: 268435456 op, 862297500.00 ns, 3.2123 ns/op\n", "\n", "OverheadWarmup 1: 268435456 op, 471566400.00 ns, 1.7567 ns/op\n", "OverheadWarmup 2: 268435456 op, 466552400.00 ns, 1.7380 ns/op\n", "OverheadWarmup 3: 268435456 op, 576908400.00 ns, 2.1492 ns/op\n", "OverheadWarmup 4: 268435456 op, 608361000.00 ns, 2.2663 ns/op\n", "OverheadWarmup 5: 268435456 op, 696230600.00 ns, 2.5937 ns/op\n", "OverheadWarmup 6: 268435456 op, 567256700.00 ns, 2.1132 ns/op\n", "OverheadWarmup 7: 268435456 op, 554610300.00 ns, 2.0661 ns/op\n", "OverheadWarmup 8: 268435456 op, 582468400.00 ns, 2.1699 ns/op\n", "OverheadWarmup 9: 268435456 op, 528403500.00 ns, 1.9685 ns/op\n", "\n", "OverheadActual 1: 268435456 op, 677908400.00 ns, 2.5254 ns/op\n", "OverheadActual 2: 268435456 op, 593884600.00 ns, 2.2124 ns/op\n", "OverheadActual 3: 268435456 op, 552982700.00 ns, 2.0600 ns/op\n", "OverheadActual 4: 268435456 op, 593728300.00 ns, 2.2118 ns/op\n", "OverheadActual 5: 268435456 op, 540111500.00 ns, 2.0121 ns/op\n", "OverheadActual 6: 268435456 op, 477180500.00 ns, 1.7776 ns/op\n", "OverheadActual 7: 268435456 op, 479161100.00 ns, 1.7850 ns/op\n", "OverheadActual 8: 268435456 op, 531079500.00 ns, 1.9784 ns/op\n", "OverheadActual 9: 268435456 op, 492533500.00 ns, 1.8348 ns/op\n", "OverheadActual 10: 268435456 op, 540470700.00 ns, 2.0134 ns/op\n", "OverheadActual 11: 268435456 op, 768091200.00 ns, 2.8614 ns/op\n", "OverheadActual 12: 268435456 op, 500270800.00 ns, 1.8637 ns/op\n", "OverheadActual 13: 268435456 op, 498249700.00 ns, 1.8561 ns/op\n", "OverheadActual 14: 268435456 op, 567981300.00 ns, 2.1159 ns/op\n", "OverheadActual 15: 268435456 op, 531957100.00 ns, 1.9817 ns/op\n", "OverheadActual 16: 268435456 op, 563283000.00 ns, 2.0984 ns/op\n", "OverheadActual 17: 268435456 op, 569417600.00 ns, 2.1212 ns/op\n", "OverheadActual 18: 268435456 op, 546393200.00 ns, 2.0355 ns/op\n", "OverheadActual 19: 268435456 op, 476632100.00 ns, 1.7756 ns/op\n", "OverheadActual 20: 268435456 op, 532101400.00 ns, 1.9822 ns/op\n", "\n", "WorkloadWarmup 1: 268435456 op, 733488300.00 ns, 2.7325 ns/op\n", "WorkloadWarmup 2: 268435456 op, 759722600.00 ns, 2.8302 ns/op\n", "WorkloadWarmup 3: 268435456 op, 749575500.00 ns, 2.7924 ns/op\n", "WorkloadWarmup 4: 268435456 op, 725301100.00 ns, 2.7020 ns/op\n", "WorkloadWarmup 5: 268435456 op, 745114600.00 ns, 2.7758 ns/op\n", "WorkloadWarmup 6: 268435456 op, 848129700.00 ns, 3.1595 ns/op\n", "WorkloadWarmup 7: 268435456 op, 759963400.00 ns, 2.8311 ns/op\n", "\n", "WorkloadActual 1: 268435456 op, 700981100.00 ns, 2.6114 ns/op\n", "WorkloadActual 2: 268435456 op, 871329600.00 ns, 3.2460 ns/op\n", "WorkloadActual 3: 268435456 op, 685167900.00 ns, 2.5524 ns/op\n", "WorkloadActual 4: 268435456 op, 715374000.00 ns, 2.6650 ns/op\n", "WorkloadActual 5: 268435456 op, 652972400.00 ns, 2.4325 ns/op\n", "WorkloadActual 6: 268435456 op, 679481300.00 ns, 2.5313 ns/op\n", "WorkloadActual 7: 268435456 op, 639918800.00 ns, 2.3839 ns/op\n", "WorkloadActual 8: 268435456 op, 664201000.00 ns, 2.4743 ns/op\n", "WorkloadActual 9: 268435456 op, 730607000.00 ns, 2.7217 ns/op\n", "WorkloadActual 10: 268435456 op, 793689100.00 ns, 2.9567 ns/op\n", "WorkloadActual 11: 268435456 op, 673956500.00 ns, 2.5107 ns/op\n", "WorkloadActual 12: 268435456 op, 695907000.00 ns, 2.5925 ns/op\n", "WorkloadActual 13: 268435456 op, 690626300.00 ns, 2.5728 ns/op\n", "WorkloadActual 14: 268435456 op, 638296000.00 ns, 2.3778 ns/op\n", "WorkloadActual 15: 268435456 op, 663132100.00 ns, 2.4704 ns/op\n", "WorkloadActual 16: 268435456 op, 696899000.00 ns, 2.5962 ns/op\n", "WorkloadActual 17: 268435456 op, 764926400.00 ns, 2.8496 ns/op\n", "WorkloadActual 18: 268435456 op, 787455000.00 ns, 2.9335 ns/op\n", "WorkloadActual 19: 268435456 op, 692160800.00 ns, 2.5785 ns/op\n", "WorkloadActual 20: 268435456 op, 718761200.00 ns, 2.6776 ns/op\n", "WorkloadActual 21: 268435456 op, 724229300.00 ns, 2.6980 ns/op\n", "WorkloadActual 22: 268435456 op, 640115300.00 ns, 2.3846 ns/op\n", "WorkloadActual 23: 268435456 op, 666321500.00 ns, 2.4822 ns/op\n", "WorkloadActual 24: 268435456 op, 1011237500.00 ns, 3.7672 ns/op\n", "WorkloadActual 25: 268435456 op, 802223500.00 ns, 2.9885 ns/op\n", "WorkloadActual 26: 268435456 op, 722083600.00 ns, 2.6900 ns/op\n", "WorkloadActual 27: 268435456 op, 810133100.00 ns, 3.0180 ns/op\n", "WorkloadActual 28: 268435456 op, 756040100.00 ns, 2.8165 ns/op\n", "WorkloadActual 29: 268435456 op, 994470200.00 ns, 3.7047 ns/op\n", "WorkloadActual 30: 268435456 op, 861272600.00 ns, 3.2085 ns/op\n", "WorkloadActual 31: 268435456 op, 754507000.00 ns, 2.8108 ns/op\n", "WorkloadActual 32: 268435456 op, 809822400.00 ns, 3.0168 ns/op\n", "WorkloadActual 33: 268435456 op, 717488700.00 ns, 2.6729 ns/op\n", "WorkloadActual 34: 268435456 op, 855054700.00 ns, 3.1853 ns/op\n", "WorkloadActual 35: 268435456 op, 718882900.00 ns, 2.6780 ns/op\n", "WorkloadActual 36: 268435456 op, 776371300.00 ns, 2.8922 ns/op\n", "WorkloadActual 37: 268435456 op, 712470600.00 ns, 2.6542 ns/op\n", "WorkloadActual 38: 268435456 op, 684294800.00 ns, 2.5492 ns/op\n", "WorkloadActual 39: 268435456 op, 762930600.00 ns, 2.8421 ns/op\n", "WorkloadActual 40: 268435456 op, 827339400.00 ns, 3.0821 ns/op\n", "WorkloadActual 41: 268435456 op, 730217300.00 ns, 2.7203 ns/op\n", "WorkloadActual 42: 268435456 op, 786903100.00 ns, 2.9314 ns/op\n", "WorkloadActual 43: 268435456 op, 791861300.00 ns, 2.9499 ns/op\n", "WorkloadActual 44: 268435456 op, 734407200.00 ns, 2.7359 ns/op\n", "WorkloadActual 45: 268435456 op, 715738500.00 ns, 2.6663 ns/op\n", "WorkloadActual 46: 268435456 op, 645804200.00 ns, 2.4058 ns/op\n", "WorkloadActual 47: 268435456 op, 746088000.00 ns, 2.7794 ns/op\n", "WorkloadActual 48: 268435456 op, 798878600.00 ns, 2.9761 ns/op\n", "WorkloadActual 49: 268435456 op, 841277200.00 ns, 3.1340 ns/op\n", "WorkloadActual 50: 268435456 op, 767504500.00 ns, 2.8592 ns/op\n", "WorkloadActual 51: 268435456 op, 670642300.00 ns, 2.4983 ns/op\n", "WorkloadActual 52: 268435456 op, 734972200.00 ns, 2.7380 ns/op\n", "WorkloadActual 53: 268435456 op, 734025600.00 ns, 2.7345 ns/op\n", "WorkloadActual 54: 268435456 op, 680251700.00 ns, 2.5341 ns/op\n", "WorkloadActual 55: 268435456 op, 897927800.00 ns, 3.3450 ns/op\n", "WorkloadActual 56: 268435456 op, 733411000.00 ns, 2.7322 ns/op\n", "WorkloadActual 57: 268435456 op, 886096200.00 ns, 3.3010 ns/op\n", "WorkloadActual 58: 268435456 op, 626306000.00 ns, 2.3332 ns/op\n", "WorkloadActual 59: 268435456 op, 704193500.00 ns, 2.6233 ns/op\n", "WorkloadActual 60: 268435456 op, 836078900.00 ns, 3.1146 ns/op\n", "WorkloadActual 61: 268435456 op, 710367200.00 ns, 2.6463 ns/op\n", "WorkloadActual 62: 268435456 op, 639291100.00 ns, 2.3815 ns/op\n", "WorkloadActual 63: 268435456 op, 760419400.00 ns, 2.8328 ns/op\n", "WorkloadActual 64: 268435456 op, 767204200.00 ns, 2.8581 ns/op\n", "WorkloadActual 65: 268435456 op, 740556200.00 ns, 2.7588 ns/op\n", "WorkloadActual 66: 268435456 op, 677227400.00 ns, 2.5229 ns/op\n", "WorkloadActual 67: 268435456 op, 628378400.00 ns, 2.3409 ns/op\n", "WorkloadActual 68: 268435456 op, 648624500.00 ns, 2.4163 ns/op\n", "WorkloadActual 69: 268435456 op, 625241200.00 ns, 2.3292 ns/op\n", "WorkloadActual 70: 268435456 op, 621494600.00 ns, 2.3152 ns/op\n", "WorkloadActual 71: 268435456 op, 785918100.00 ns, 2.9278 ns/op\n", "WorkloadActual 72: 268435456 op, 679462700.00 ns, 2.5312 ns/op\n", "WorkloadActual 73: 268435456 op, 803845400.00 ns, 2.9946 ns/op\n", "WorkloadActual 74: 268435456 op, 658608900.00 ns, 2.4535 ns/op\n", "WorkloadActual 75: 268435456 op, 639482200.00 ns, 2.3823 ns/op\n", "WorkloadActual 76: 268435456 op, 663531300.00 ns, 2.4718 ns/op\n", "WorkloadActual 77: 268435456 op, 683369900.00 ns, 2.5458 ns/op\n", "WorkloadActual 78: 268435456 op, 680896400.00 ns, 2.5365 ns/op\n", "WorkloadActual 79: 268435456 op, 696729500.00 ns, 2.5955 ns/op\n", "WorkloadActual 80: 268435456 op, 685439500.00 ns, 2.5535 ns/op\n", "WorkloadActual 81: 268435456 op, 684179000.00 ns, 2.5488 ns/op\n", "WorkloadActual 82: 268435456 op, 779341100.00 ns, 2.9033 ns/op\n", "WorkloadActual 83: 268435456 op, 655296100.00 ns, 2.4412 ns/op\n", "WorkloadActual 84: 268435456 op, 628327900.00 ns, 2.3407 ns/op\n", "WorkloadActual 85: 268435456 op, 629001300.00 ns, 2.3432 ns/op\n", "WorkloadActual 86: 268435456 op, 762178700.00 ns, 2.8393 ns/op\n", "WorkloadActual 87: 268435456 op, 648718100.00 ns, 2.4167 ns/op\n", "WorkloadActual 88: 268435456 op, 769951000.00 ns, 2.8683 ns/op\n", "WorkloadActual 89: 268435456 op, 691268700.00 ns, 2.5752 ns/op\n", "WorkloadActual 90: 268435456 op, 638621700.00 ns, 2.3791 ns/op\n", "WorkloadActual 91: 268435456 op, 761102400.00 ns, 2.8353 ns/op\n", "WorkloadActual 92: 268435456 op, 734246400.00 ns, 2.7353 ns/op\n", "WorkloadActual 93: 268435456 op, 798007700.00 ns, 2.9728 ns/op\n", "WorkloadActual 94: 268435456 op, 780768100.00 ns, 2.9086 ns/op\n", "WorkloadActual 95: 268435456 op, 705217300.00 ns, 2.6271 ns/op\n", "WorkloadActual 96: 268435456 op, 662000500.00 ns, 2.4661 ns/op\n", "WorkloadActual 97: 268435456 op, 683222400.00 ns, 2.5452 ns/op\n", "WorkloadActual 98: 268435456 op, 650537700.00 ns, 2.4234 ns/op\n", "WorkloadActual 99: 268435456 op, 737556000.00 ns, 2.7476 ns/op\n", "WorkloadActual 100: 268435456 op, 808114200.00 ns, 3.0105 ns/op\n", "\n", "WorkloadResult 1: 268435456 op, 160690000.00 ns, 0.5986 ns/op\n", "WorkloadResult 2: 268435456 op, 331038500.00 ns, 1.2332 ns/op\n", "WorkloadResult 3: 268435456 op, 144876800.00 ns, 0.5397 ns/op\n", "WorkloadResult 4: 268435456 op, 175082900.00 ns, 0.6522 ns/op\n", "WorkloadResult 5: 268435456 op, 112681300.00 ns, 0.4198 ns/op\n", "WorkloadResult 6: 268435456 op, 139190200.00 ns, 0.5185 ns/op\n", "WorkloadResult 7: 268435456 op, 99627700.00 ns, 0.3711 ns/op\n", "WorkloadResult 8: 268435456 op, 123909900.00 ns, 0.4616 ns/op\n", "WorkloadResult 9: 268435456 op, 190315900.00 ns, 0.7090 ns/op\n", "WorkloadResult 10: 268435456 op, 253398000.00 ns, 0.9440 ns/op\n", "WorkloadResult 11: 268435456 op, 133665400.00 ns, 0.4979 ns/op\n", "WorkloadResult 12: 268435456 op, 155615900.00 ns, 0.5797 ns/op\n", "WorkloadResult 13: 268435456 op, 150335200.00 ns, 0.5600 ns/op\n", "WorkloadResult 14: 268435456 op, 98004900.00 ns, 0.3651 ns/op\n", "WorkloadResult 15: 268435456 op, 122841000.00 ns, 0.4576 ns/op\n", "WorkloadResult 16: 268435456 op, 156607900.00 ns, 0.5834 ns/op\n", "WorkloadResult 17: 268435456 op, 224635300.00 ns, 0.8368 ns/op\n", "WorkloadResult 18: 268435456 op, 247163900.00 ns, 0.9208 ns/op\n", "WorkloadResult 19: 268435456 op, 151869700.00 ns, 0.5658 ns/op\n", "WorkloadResult 20: 268435456 op, 178470100.00 ns, 0.6649 ns/op\n", "WorkloadResult 21: 268435456 op, 183938200.00 ns, 0.6852 ns/op\n", "WorkloadResult 22: 268435456 op, 99824200.00 ns, 0.3719 ns/op\n", "WorkloadResult 23: 268435456 op, 126030400.00 ns, 0.4695 ns/op\n", "WorkloadResult 24: 268435456 op, 261932400.00 ns, 0.9758 ns/op\n", "WorkloadResult 25: 268435456 op, 181792500.00 ns, 0.6772 ns/op\n", "WorkloadResult 26: 268435456 op, 269842000.00 ns, 1.0052 ns/op\n", "WorkloadResult 27: 268435456 op, 215749000.00 ns, 0.8037 ns/op\n", "WorkloadResult 28: 268435456 op, 320981500.00 ns, 1.1957 ns/op\n", "WorkloadResult 29: 268435456 op, 214215900.00 ns, 0.7980 ns/op\n", "WorkloadResult 30: 268435456 op, 269531300.00 ns, 1.0041 ns/op\n", "WorkloadResult 31: 268435456 op, 177197600.00 ns, 0.6601 ns/op\n", "WorkloadResult 32: 268435456 op, 314763600.00 ns, 1.1726 ns/op\n", "WorkloadResult 33: 268435456 op, 178591800.00 ns, 0.6653 ns/op\n", "WorkloadResult 34: 268435456 op, 236080200.00 ns, 0.8795 ns/op\n", "WorkloadResult 35: 268435456 op, 172179500.00 ns, 0.6414 ns/op\n", "WorkloadResult 36: 268435456 op, 144003700.00 ns, 0.5365 ns/op\n", "WorkloadResult 37: 268435456 op, 222639500.00 ns, 0.8294 ns/op\n", "WorkloadResult 38: 268435456 op, 287048300.00 ns, 1.0693 ns/op\n", "WorkloadResult 39: 268435456 op, 189926200.00 ns, 0.7075 ns/op\n", "WorkloadResult 40: 268435456 op, 246612000.00 ns, 0.9187 ns/op\n", "WorkloadResult 41: 268435456 op, 251570200.00 ns, 0.9372 ns/op\n", "WorkloadResult 42: 268435456 op, 194116100.00 ns, 0.7231 ns/op\n", "WorkloadResult 43: 268435456 op, 175447400.00 ns, 0.6536 ns/op\n", "WorkloadResult 44: 268435456 op, 105513100.00 ns, 0.3931 ns/op\n", "WorkloadResult 45: 268435456 op, 205796900.00 ns, 0.7667 ns/op\n", "WorkloadResult 46: 268435456 op, 258587500.00 ns, 0.9633 ns/op\n", "WorkloadResult 47: 268435456 op, 300986100.00 ns, 1.1213 ns/op\n", "WorkloadResult 48: 268435456 op, 227213400.00 ns, 0.8464 ns/op\n", "WorkloadResult 49: 268435456 op, 130351200.00 ns, 0.4856 ns/op\n", "WorkloadResult 50: 268435456 op, 194681100.00 ns, 0.7252 ns/op\n", "WorkloadResult 51: 268435456 op, 193734500.00 ns, 0.7217 ns/op\n", "WorkloadResult 52: 268435456 op, 139960600.00 ns, 0.5214 ns/op\n", "WorkloadResult 53: 268435456 op, 357636700.00 ns, 1.3323 ns/op\n", "WorkloadResult 54: 268435456 op, 193119900.00 ns, 0.7194 ns/op\n", "WorkloadResult 55: 268435456 op, 345805100.00 ns, 1.2882 ns/op\n", "WorkloadResult 56: 268435456 op, 86014900.00 ns, 0.3204 ns/op\n", "WorkloadResult 57: 268435456 op, 163902400.00 ns, 0.6106 ns/op\n", "WorkloadResult 58: 268435456 op, 295787800.00 ns, 1.1019 ns/op\n", "WorkloadResult 59: 268435456 op, 170076100.00 ns, 0.6336 ns/op\n", "WorkloadResult 60: 268435456 op, 99000000.00 ns, 0.3688 ns/op\n", "WorkloadResult 61: 268435456 op, 220128300.00 ns, 0.8200 ns/op\n", "WorkloadResult 62: 268435456 op, 226913100.00 ns, 0.8453 ns/op\n", "WorkloadResult 63: 268435456 op, 200265100.00 ns, 0.7460 ns/op\n", "WorkloadResult 64: 268435456 op, 136936300.00 ns, 0.5101 ns/op\n", "WorkloadResult 65: 268435456 op, 88087300.00 ns, 0.3282 ns/op\n", "WorkloadResult 66: 268435456 op, 108333400.00 ns, 0.4036 ns/op\n", "WorkloadResult 67: 268435456 op, 84950100.00 ns, 0.3165 ns/op\n", "WorkloadResult 68: 268435456 op, 81203500.00 ns, 0.3025 ns/op\n", "WorkloadResult 69: 268435456 op, 245627000.00 ns, 0.9150 ns/op\n", "WorkloadResult 70: 268435456 op, 139171600.00 ns, 0.5185 ns/op\n", "WorkloadResult 71: 268435456 op, 263554300.00 ns, 0.9818 ns/op\n", "WorkloadResult 72: 268435456 op, 118317800.00 ns, 0.4408 ns/op\n", "WorkloadResult 73: 268435456 op, 99191100.00 ns, 0.3695 ns/op\n", "WorkloadResult 74: 268435456 op, 123240200.00 ns, 0.4591 ns/op\n", "WorkloadResult 75: 268435456 op, 143078800.00 ns, 0.5330 ns/op\n", "WorkloadResult 76: 268435456 op, 140605300.00 ns, 0.5238 ns/op\n", "WorkloadResult 77: 268435456 op, 156438400.00 ns, 0.5828 ns/op\n", "WorkloadResult 78: 268435456 op, 145148400.00 ns, 0.5407 ns/op\n", "WorkloadResult 79: 268435456 op, 143887900.00 ns, 0.5360 ns/op\n", "WorkloadResult 80: 268435456 op, 239050000.00 ns, 0.8905 ns/op\n", "WorkloadResult 81: 268435456 op, 115005000.00 ns, 0.4284 ns/op\n", "WorkloadResult 82: 268435456 op, 88036800.00 ns, 0.3280 ns/op\n", "WorkloadResult 83: 268435456 op, 88710200.00 ns, 0.3305 ns/op\n", "WorkloadResult 84: 268435456 op, 221887600.00 ns, 0.8266 ns/op\n", "WorkloadResult 85: 268435456 op, 108427000.00 ns, 0.4039 ns/op\n", "WorkloadResult 86: 268435456 op, 229659900.00 ns, 0.8555 ns/op\n", "WorkloadResult 87: 268435456 op, 150977600.00 ns, 0.5624 ns/op\n", "WorkloadResult 88: 268435456 op, 98330600.00 ns, 0.3663 ns/op\n", "WorkloadResult 89: 268435456 op, 220811300.00 ns, 0.8226 ns/op\n", "WorkloadResult 90: 268435456 op, 193955300.00 ns, 0.7225 ns/op\n", "WorkloadResult 91: 268435456 op, 257716600.00 ns, 0.9601 ns/op\n", "WorkloadResult 92: 268435456 op, 240477000.00 ns, 0.8958 ns/op\n", "WorkloadResult 93: 268435456 op, 164926200.00 ns, 0.6144 ns/op\n", "WorkloadResult 94: 268435456 op, 121709400.00 ns, 0.4534 ns/op\n", "WorkloadResult 95: 268435456 op, 142931300.00 ns, 0.5325 ns/op\n", "WorkloadResult 96: 268435456 op, 110246600.00 ns, 0.4107 ns/op\n", "WorkloadResult 97: 268435456 op, 197264900.00 ns, 0.7349 ns/op\n", "WorkloadResult 98: 268435456 op, 267823100.00 ns, 0.9977 ns/op\n", "\n", "\n", "Mean = 0.679 ns, StdErr = 0.025 ns (3.69%), N = 98, StdDev = 0.248 ns\n", "Min = 0.303 ns, Q1 = 0.489 ns, Median = 0.653 ns, Q3 = 0.846 ns, Max = 1.332 ns\n", "IQR = 0.357 ns, LowerFence = -0.048 ns, UpperFence = 1.382 ns\n", "ConfidenceInterval = [0.594 ns; 0.765 ns] (CI 99.9%), Margin = 0.085 ns (12.53% of Mean)\n", "Skewness = 0.53, Kurtosis = 2.52, MValue = 3.33\n", "\n", "// ** Remained 0 (0.0%) benchmark(s) to run. Estimated finish 2025-05-05 19:16 (0h 0m from now) **\n", "\u001b]9;4;1;100\u001b\\Successfully reverted power plan (GUID: 8c0b799f-ec5b-4e3b-b41f-d5834206c3f2 FriendlyName: 卓越性能)\n", "// ***** BenchmarkRunner: Finish *****\n", "\n", "// * Export *\n", "\n", "// * Detailed results *\n", "MyBenchmarks.TestMethod: Job-LIUZPN(Toolchain=InProcessEmitToolchain)\n", "Runtime = ; GC = \n", "Mean = 0.679 ns, StdErr = 0.025 ns (3.69%), N = 98, StdDev = 0.248 ns\n", "Min = 0.303 ns, Q1 = 0.489 ns, Median = 0.653 ns, Q3 = 0.846 ns, Max = 1.332 ns\n", "IQR = 0.357 ns, LowerFence = -0.048 ns, UpperFence = 1.382 ns\n", "ConfidenceInterval = [0.594 ns; 0.765 ns] (CI 99.9%), Margin = 0.085 ns (12.53% of Mean)\n", "Skewness = 0.53, Kurtosis = 2.52, MValue = 3.33\n", "-------------------- Histogram --------------------\n", "[0.301 ns ; 0.448 ns) | @@@@@@@@@@@@@@@@@@@\n", "[0.448 ns ; 0.589 ns) | @@@@@@@@@@@@@@@@@@@@@@@@\n", "[0.589 ns ; 0.749 ns) | @@@@@@@@@@@@@@@@@@@@@\n", "[0.749 ns ; 0.797 ns) | @\n", "[0.797 ns ; 0.938 ns) | @@@@@@@@@@@@@@@@@\n", "[0.938 ns ; 1.097 ns) | @@@@@@@@@\n", "[1.097 ns ; 1.238 ns) | @@@@@\n", "[1.238 ns ; 1.403 ns) | @@\n", "---------------------------------------------------\n", "\n", "// * Summary *\n", "\n", "BenchmarkDotNet v0.13.12, Windows 11 (10.0.26100.3915)\n", "Intel Core i9-9880H CPU 2.30GHz, 1 CPU, 16 logical and 8 physical cores\n", ".NET SDK 10.0.100-preview.3.25201.16\n", " [Host] : .NET 9.0.4 (9.0.425.16305), X64 RyuJIT AVX2\n", "\n", "Toolchain=InProcessEmitToolchain \n", "\n", "| Method | Mean | Error | StdDev |\n", "|----------- |----------:|----------:|----------:|\n", "| TestMethod | 0.6795 ns | 0.0851 ns | 0.2483 ns |\n", "\n", "// * Legends *\n", " Mean : Arithmetic mean of all measurements\n", " Error : Half of 99.9% confidence interval\n", " StdDev : Standard deviation of all measurements\n", " 1 ns : 1 Nanosecond (0.000000001 sec)\n", "\n", "// ***** BenchmarkRunner: End *****\n", "Run time: 00:01:46 (106.52 sec), executed benchmarks: 1\n", "\n", "Global total time: 00:01:46 (106.52 sec), executed benchmarks: 1\n", "// * Artifacts cleanup *\n", "Artifacts cleanup is finished\n", "\u001b]9;4;0;0\u001b\\" ] } ], "source": [ "var summary = BenchmarkRunner.Run(new BenchmarkDotNet.Configs.DebugInProcessConfig());" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 关键注意事项" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. 配置模式\n", "\n", " Polyglot Notebook 默认使用 Debug 配置,需通过 DebugInProcessConfig 强制适配,否则可能报错" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2. 内存分配分析\n", "\n", " 添加 [MemoryDiagnoser] 属性可监控内存分配情况" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "3. 避免内联优化\n", "\n", " 若测试简单方法,需确保编译器未将其优化为内联代码,可通过复杂逻辑或 [MethodImpl] 属性规避" ] } ], "metadata": { "kernelspec": { "display_name": ".NET (C#)", "language": "C#", "name": ".net-csharp" }, "language_info": { "name": "polyglot-notebook" }, "orig_nbformat": 4, "polyglot_notebook": { "kernelInfo": { "defaultKernelName": "csharp", "items": [ { "aliases": [], "name": "csharp" }, { "aliases": [], "name": "razor" } ] } } }, "nbformat": 4, "nbformat_minor": 2 }