mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-19 02:53:06 +08:00
Performance optimizations
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
@@ -392,9 +393,9 @@ namespace MQTTnet.Core.Tests
|
||||
private static void SerializeAndCompare(MqttBasePacket packet, string expectedBase64Value, MqttProtocolVersion protocolVersion = MqttProtocolVersion.V311)
|
||||
{
|
||||
var serializer = new MqttPacketSerializer { ProtocolVersion = protocolVersion };
|
||||
var buffer = serializer.Serialize(packet);
|
||||
|
||||
Assert.AreEqual(expectedBase64Value, Convert.ToBase64String(buffer));
|
||||
var chunks = serializer.Serialize(packet);
|
||||
|
||||
Assert.AreEqual(expectedBase64Value, Convert.ToBase64String(Join(chunks)));
|
||||
}
|
||||
|
||||
private static void DeserializeAndCompare(MqttBasePacket packet, string expectedBase64Value)
|
||||
@@ -403,18 +404,29 @@ namespace MQTTnet.Core.Tests
|
||||
|
||||
var buffer1 = serializer.Serialize(packet);
|
||||
|
||||
using (var headerStream = new MemoryStream(buffer1))
|
||||
using (var headerStream = new MemoryStream(Join(buffer1)))
|
||||
{
|
||||
var header = MqttPacketReader.ReadHeaderFromSource(headerStream, CancellationToken.None);
|
||||
|
||||
using (var bodyStream = new MemoryStream(buffer1, (int)headerStream.Position, header.BodyLength))
|
||||
using (var bodyStream = new MemoryStream(Join(buffer1), (int)headerStream.Position, header.BodyLength))
|
||||
{
|
||||
var deserializedPacket = serializer.Deserialize(new ReceivedMqttPacket(header, bodyStream));
|
||||
var buffer2 = serializer.Serialize(deserializedPacket);
|
||||
|
||||
Assert.AreEqual(expectedBase64Value, Convert.ToBase64String(buffer2));
|
||||
Assert.AreEqual(expectedBase64Value, Convert.ToBase64String(Join(buffer2)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static byte[] Join(IEnumerable<ArraySegment<byte>> chunks)
|
||||
{
|
||||
var buffer = new MemoryStream();
|
||||
foreach (var chunk in chunks)
|
||||
{
|
||||
buffer.Write(chunk.Array, chunk.Offset, chunk.Count);
|
||||
}
|
||||
|
||||
return buffer.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace MQTTnet.Core.Tests
|
||||
|
||||
sm.Subscribe(sp, "");
|
||||
|
||||
var pp = new MqttPublishPacket
|
||||
var pp = new MqttApplicationMessage
|
||||
{
|
||||
Topic = "A/B/C",
|
||||
QualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce
|
||||
@@ -37,7 +37,7 @@ namespace MQTTnet.Core.Tests
|
||||
|
||||
sm.Subscribe(sp, "");
|
||||
|
||||
var pp = new MqttPublishPacket
|
||||
var pp = new MqttApplicationMessage
|
||||
{
|
||||
Topic = "A/B/X",
|
||||
QualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce
|
||||
@@ -56,7 +56,7 @@ namespace MQTTnet.Core.Tests
|
||||
|
||||
sm.Subscribe(sp, "");
|
||||
|
||||
var pp = new MqttPublishPacket
|
||||
var pp = new MqttApplicationMessage
|
||||
{
|
||||
Topic = "A/B/C",
|
||||
QualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce
|
||||
|
||||
@@ -171,16 +171,16 @@ namespace MQTTnet.TestApp.NetCore
|
||||
|
||||
var msgs = 0;
|
||||
var stopwatch = Stopwatch.StartNew();
|
||||
mqttServer.ApplicationMessageReceived += (sender, args) =>
|
||||
{
|
||||
msgs++;
|
||||
if (stopwatch.ElapsedMilliseconds > 1000)
|
||||
{
|
||||
Console.WriteLine($"received {msgs}");
|
||||
msgs = 0;
|
||||
stopwatch.Restart();
|
||||
}
|
||||
};
|
||||
////mqttServer.ApplicationMessageReceived += (sender, args) =>
|
||||
////{
|
||||
//// msgs++;
|
||||
//// if (stopwatch.ElapsedMilliseconds > 1000)
|
||||
//// {
|
||||
//// Console.WriteLine($"received {msgs}");
|
||||
//// msgs = 0;
|
||||
//// stopwatch.Restart();
|
||||
//// }
|
||||
////};
|
||||
await mqttServer.StartAsync(new MqttServerOptions());
|
||||
|
||||
Console.WriteLine("Press any key to exit.");
|
||||
|
||||
Reference in New Issue
Block a user