From 6c2a5e3babb232424e76c12760737717a4404e27 Mon Sep 17 00:00:00 2001 From: Eveldee Date: Mon, 7 Dec 2020 18:57:10 +0100 Subject: [PATCH] Optimize using Span --- ...veshareUARTFingerprintSensor.Sample.csproj | 13 +++++++++ .../packages.config | 4 +++ .../FingerprintSensor.cs | 27 +++++++++++-------- .../WaveshareUARTFingerprintSensor.csproj | 13 +++++++++ .../packages.config | 4 +++ 5 files changed, 50 insertions(+), 11 deletions(-) diff --git a/WaveshareUARTFingerprintSensor.Sample/WaveshareUARTFingerprintSensor.Sample.csproj b/WaveshareUARTFingerprintSensor.Sample/WaveshareUARTFingerprintSensor.Sample.csproj index 24ae430..14d92e7 100644 --- a/WaveshareUARTFingerprintSensor.Sample/WaveshareUARTFingerprintSensor.Sample.csproj +++ b/WaveshareUARTFingerprintSensor.Sample/WaveshareUARTFingerprintSensor.Sample.csproj @@ -55,8 +55,21 @@ ..\packages\Unosquare.Swan.Lite.3.0.0\lib\net461\Swan.Lite.dll + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + ..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll diff --git a/WaveshareUARTFingerprintSensor.Sample/packages.config b/WaveshareUARTFingerprintSensor.Sample/packages.config index e93a0bf..e075a78 100644 --- a/WaveshareUARTFingerprintSensor.Sample/packages.config +++ b/WaveshareUARTFingerprintSensor.Sample/packages.config @@ -1,5 +1,9 @@  + + + + diff --git a/WaveshareUARTFingerprintSensor/FingerprintSensor.cs b/WaveshareUARTFingerprintSensor/FingerprintSensor.cs index c6102b1..73000cc 100644 --- a/WaveshareUARTFingerprintSensor/FingerprintSensor.cs +++ b/WaveshareUARTFingerprintSensor/FingerprintSensor.cs @@ -254,11 +254,12 @@ namespace WaveshareUARTFingerprintSensor /// /// /// - public (ResponseType responseType, byte[] eigenvalues) AddFingerprintAndAcquireEigenvalues(ushort userID, UserPermission userPermission) + public ResponseType AddFingerprintAndAcquireEigenvalues(ushort userID, UserPermission userPermission, out Span eigenvalues) { if (userID > MaxUserID) { - return (ResponseType.Full, null); + eigenvalues = Span.Empty; + return ResponseType.Full; } CommandType[] commands = { CommandType.AddFingerprint1, CommandType.AddFingerprint2 }; @@ -270,12 +271,14 @@ namespace WaveshareUARTFingerprintSensor { if (loopResponse.responseType != ResponseType.Success) { - return (loopResponse.responseType, null); + eigenvalues = Span.Empty; + return loopResponse.responseType; } } else { - return (ResponseType.Timeout, null); + eigenvalues = Span.Empty; + return ResponseType.Timeout; } Thread.Sleep(50); @@ -285,19 +288,21 @@ namespace WaveshareUARTFingerprintSensor { if (response.responseType != ResponseType.Success) { - return (response.responseType, null); + eigenvalues = Span.Empty; + return response.responseType; } ushort length = Utils.Merge(response.first, response.second); var data = ReadData(length); - var eigenvalues = data.Skip(3).ToArray(); + eigenvalues = data.AsSpan(3); - return (ResponseType.Success, eigenvalues); + return ResponseType.Success; } else { - return (ResponseType.Timeout, null); + eigenvalues = Span.Empty; + return ResponseType.Timeout; } } @@ -447,7 +452,7 @@ namespace WaveshareUARTFingerprintSensor return false; } - public bool TryAcquireEigenvalues(out byte[] eigenvalues) + public bool TryAcquireEigenvalues(out Span eigenvalues) { if (TrySendAndReceive(CommandType.AcquireEigenvalues, 0, 0, 0, out var response)) { @@ -455,13 +460,13 @@ namespace WaveshareUARTFingerprintSensor { var length = Utils.Merge(response.first, response.second); - eigenvalues = ReadData(length, skipChecksum: true).Skip(3).ToArray(); + eigenvalues = ReadData(length, skipChecksum: true).AsSpan(3); return true; } } - eigenvalues = default; + eigenvalues = Span.Empty; return false; } diff --git a/WaveshareUARTFingerprintSensor/WaveshareUARTFingerprintSensor.csproj b/WaveshareUARTFingerprintSensor/WaveshareUARTFingerprintSensor.csproj index c51b466..5bbf423 100644 --- a/WaveshareUARTFingerprintSensor/WaveshareUARTFingerprintSensor.csproj +++ b/WaveshareUARTFingerprintSensor/WaveshareUARTFingerprintSensor.csproj @@ -38,8 +38,21 @@ ..\packages\Unosquare.Swan.Lite.3.0.0\lib\net461\Swan.Lite.dll + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + ..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll diff --git a/WaveshareUARTFingerprintSensor/packages.config b/WaveshareUARTFingerprintSensor/packages.config index e93a0bf..e075a78 100644 --- a/WaveshareUARTFingerprintSensor/packages.config +++ b/WaveshareUARTFingerprintSensor/packages.config @@ -1,5 +1,9 @@  + + + +