Skip to content

Commit 2adb263

Browse files
committed
doc: 更新基准测试文档
1 parent 8ba4dbb commit 2adb263

File tree

1 file changed

+59
-10
lines changed

1 file changed

+59
-10
lines changed

src/BootstrapBlazor.Server/Components/Samples/Modbus/ModbusFactories.razor

Lines changed: 59 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,64 @@ private IModbusFactory? ModbusFactory { get; set; }</Pre>
6363
<p>对应 <code>IModbusClient</code> 实例方法如下</p>
6464

6565
<ul class="ul-demo">
66-
<li>线圈 (Coils) <code>ReadCoilsAsync</code> <code>WriteCoilAsync</code> <code>WriteMultipleCoilsAsync</code></li>
67-
<li>离散输入 (Discrete Inputs) <code>ReadInputsAsync</code></li>
68-
<li>输入寄存器 (Input Registers) <code>ReadInputRegistersAsync</code></li>
69-
<li>保持寄存器 (Holding Registers) <code>ReadHoldingRegistersAsync</code> <code>WriteRegisterAsync</code> <code>WriteMultipleRegistersAsync</code></li>
66+
<li>线圈 (Coils) <code>ReadCoilsAsync</code> <code>WriteCoilAsync</code> <code>WriteMultipleCoilsAsync</code> 最大读取数量 <code>2000</code> 最大写入数量 <code>1968</code></li>
67+
<li>离散输入 (Discrete Inputs) <code>ReadInputsAsync</code> 最大读取数量 <code>2000</code></li>
68+
<li>输入寄存器 (Input Registers) <code>ReadInputRegistersAsync</code> 最大读取数量 <code>125</code></li>
69+
<li>保持寄存器 (Holding Registers) <code>ReadHoldingRegistersAsync</code> <code>WriteRegisterAsync</code> <code>WriteMultipleRegistersAsync</code> 最大读取数量 <code>125</code> 最大写入数量 <code>123</code></li>
7070
</ul>
7171

72-
<pre>Benchmark 结果如下:
73-
| Method | Mean | Error | StdDev | Gen0 | Allocated |
74-
|------------------ |--------:|--------:|--------:|----------:|----------:|
75-
| LongbowModbus | 20.36 s | 0.404 s | 0.397 s | 1000.0000 | 15.81 MB |
76-
| NModbus | 40.37 s | 0.806 s | 1.734 s | 2000.0000 | 29.6 MB |
77-
</pre>
72+
<p>项目包含 Benchmark 基准测试工程</p>
73+
74+
<Pre>private const int NumberOfTask = 10;
75+
private const int TaskNumberOfClient = 10;
76+
private const int ClientCount = 10;
77+
78+
private async Task InitLongbowModbus()
79+
{
80+
var sc = new ServiceCollection();
81+
sc.AddModbusFactory();
82+
83+
var provider = sc.BuildServiceProvider();
84+
var factory = provider.GetRequiredService&lt;IModbusFactory&gt;();
85+
86+
for (var index = 0; index &lt; ClientCount; index++)
87+
{
88+
var client = factory.GetOrCreateTcpMaster();
89+
await client.ConnectAsync("127.0.0.1", 502);
90+
await client.ReadHoldingRegistersAsync(0x01, 0x00, 100);
91+
92+
_lgbModbusClients.Add(client);
93+
}
94+
}
95+
96+
[Benchmark]
97+
public async Task LongbowModbus()
98+
{
99+
var tasks = _lgbModbusClients.SelectMany(c =>
100+
{
101+
var tasks = new List&lt;Task&gt;();
102+
for (int i = 0; i &lt; TaskNumberOfClient; i++)
103+
{
104+
tasks.Add(Task.Run(async () =&gt;
105+
{
106+
for (int i = 0; i &lt; NumberOfTask; i++)
107+
{
108+
var d = await c.ReadHoldingRegistersAsync(1, 0, 100);
109+
}
110+
}));
111+
}
112+
return tasks;
113+
}).ToList();
114+
115+
await Task.WhenAll(tasks);
116+
}</Pre>
117+
118+
<p>共 10 个 <code>Socket</code> 连接,每个连接 10 个并发任务,每个任务进行 10 次 <code>ReadHoldingRegistersAsync</code> 方法调用,没个方法读取 100 个地址数据</p>
119+
120+
<p>Benchmark 结果如下:</p>
121+
122+
<Pre>| Method | Mean | Error | StdDev | Allocated |
123+
|------------------ |--------:|---------:|---------:|----------:|
124+
| LongbowModbus | 2.458 s | 0.0488 s | 0.1007 s | 2.11 MB |
125+
| NModbus | 4.752 s | 0.1544 s | 0.4552 s | 3.3 MB |
126+
</Pre>

0 commit comments

Comments
 (0)