From 68a606a98e4447d274eae87be2831d50817acd9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81kos=20Halmai?= Date: Thu, 23 Mar 2023 22:23:42 +0100 Subject: [PATCH] Various memory managemnet issues resolved & Depth field. --- 3D.cs | 7 +- BitmapHelper.cs | 14 +- InterferometricMeasurement.cs | 4 +- Program.cs | 16 +- Properties/launchSettings.json | 2 +- SL3Reader.cs | 323 ++++++++++++++++++++------------- 6 files changed, 218 insertions(+), 148 deletions(-) diff --git a/3D.cs b/3D.cs index 3b20239..ab43436 100644 --- a/3D.cs +++ b/3D.cs @@ -1,8 +1,9 @@ -using System.Runtime.InteropServices; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; namespace SL3Reader { - [StructLayout(LayoutKind.Sequential, Size = Size)] - public readonly ref struct ThreeDimensionalFrameHeader + [StructLayout(LayoutKind.Sequential, Size = Size), SkipLocalsInit] + public readonly ref struct ThreeDimensionalFrameHeader { public const int Size = 76; diff --git a/BitmapHelper.cs b/BitmapHelper.cs index b3a1b76..1b4d240 100644 --- a/BitmapHelper.cs +++ b/BitmapHelper.cs @@ -1,9 +1,9 @@ using System; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices.Marshalling; -namespace SL3Reader { - public static class BitmapHelper { +namespace SL3Reader +{ + public static class BitmapHelper + { public const int BitmapCombinedHeaderSize = BitmapFileHeader.Size + BitmapInfoHeader.Size + @@ -278,7 +278,8 @@ public static class BitmapHelper { 56,187,240,0 /* End Palette */ }; - public static byte[] CreateBuffer(int maxHeight, int maxWidth) { + public static byte[] CreateBuffer(int maxHeight, int maxWidth) + { // (maxHeight * (maxWidth + (4 - maxWidth % 4)))); byte[] buffer = GC.AllocateUninitializedArray( BitmapCombinedHeaderSize + @@ -291,7 +292,8 @@ public static unsafe void UpdateBuffer(byte[] buffer, int height, int width, out int fullStride, out Span fileBuffer, - out Span pixelData) { + out Span pixelData) + { fullStride = width; //width + (4 - (width % 4)); fixed (byte* pBuffer = &buffer[0]) // Just formal: buffer is pre-pinned by the GC. { diff --git a/InterferometricMeasurement.cs b/InterferometricMeasurement.cs index e589796..d116171 100644 --- a/InterferometricMeasurement.cs +++ b/InterferometricMeasurement.cs @@ -5,8 +5,8 @@ namespace SL3Reader { public readonly ref struct InterferometricMeasurement { public const int Size = 2 * sizeof(float); - public readonly float Delta { get; } - public readonly float Depth { get; } + public readonly float Delta; + public readonly float Depth; public override readonly string ToString() => $"{Delta};{Depth}"; } } \ No newline at end of file diff --git a/Program.cs b/Program.cs index 1d0da8c..83d1830 100644 --- a/Program.cs +++ b/Program.cs @@ -109,14 +109,14 @@ void PrintSummary() { SortedDictionary> indexByType = sl3reader.IndexByType; WriteLine("File statistics:"); - WriteLine("\tNumber of frames: " + sl3reader.Frames.Count.ToString()); - WriteLine("\tNumber of primary frames: " + indexByType[SurveyType.Primary].Count.ToString()); - WriteLine("\tNumber of secondary frames: " + indexByType[SurveyType.Secondary].Count.ToString()); - WriteLine("\tNumber of left sidescan frames: " + indexByType[SurveyType.LeftSidescan].Count.ToString()); - WriteLine("\tNumber of right sidescan frames: " + indexByType[SurveyType.RightSidescan].Count.ToString()); - WriteLine("\tNumber of sidescan frames: " + indexByType[SurveyType.SideScan].Count.ToString()); - WriteLine("\tNumber of downscan frames: " + indexByType[SurveyType.DownScan].Count.ToString()); - WriteLine("\tNumber of 3D frames: " + indexByType[SurveyType.ThreeDimensional].Count.ToString()); + WriteLine("\tNumber of frames: " + sl3reader.Frames.Count.ToString("# ##0")); + WriteLine("\tNumber of primary frames: " + indexByType[SurveyType.Primary].Count.ToString("# ##0")); + WriteLine("\tNumber of secondary frames: " + indexByType[SurveyType.Secondary].Count.ToString("# ##0")); + WriteLine("\tNumber of left sidescan frames: " + indexByType[SurveyType.LeftSidescan].Count.ToString("# ##0")); + WriteLine("\tNumber of right sidescan frames: " + indexByType[SurveyType.RightSidescan].Count.ToString("# ##0")); + WriteLine("\tNumber of sidescan frames: " + indexByType[SurveyType.SideScan].Count.ToString("# ##0")); + WriteLine("\tNumber of downscan frames: " + indexByType[SurveyType.DownScan].Count.ToString("# ##0")); + WriteLine("\tNumber of 3D frames: " + indexByType[SurveyType.ThreeDimensional].Count.ToString("# ##0")); WriteLine(); PrintGreen("\nExport finished successfully."); diff --git a/Properties/launchSettings.json b/Properties/launchSettings.json index 03262ce..42c87b2 100644 --- a/Properties/launchSettings.json +++ b/Properties/launchSettings.json @@ -2,7 +2,7 @@ "profiles": { "SL3Reader": { "commandName": "Project", - "commandLineArgs": "\"F:\\Sonar0000saar.sl3\" \"F:\\SS\" -ss" + "commandLineArgs": "\"F:\\Sonar0000saar.sl3\" \"F:\\op.csv\" -3dm" } } } diff --git a/SL3Reader.cs b/SL3Reader.cs index a399825..245a6e6 100644 --- a/SL3Reader.cs +++ b/SL3Reader.cs @@ -17,8 +17,12 @@ using System.Diagnostics.CodeAnalysis; using System.ComponentModel; using System.ComponentModel.Design; +using System.Reflection.Metadata; +using System.Runtime.InteropServices; +using System.Text.RegularExpressions; -namespace SL3Reader { +namespace SL3Reader +{ [DebuggerDisplay("{Name}")] public class SL3Reader : @@ -26,25 +30,30 @@ public class SL3Reader : IEnumerable