Skip to content

Commit 3762343

Browse files
martijn00loyldg
andauthored
Feat replace dynamic with class (#823)
* perf:Replace dynamic with class for better performance Fix:NativeAOT build issue * Format * Format --------- Co-authored-by: mytelegram <mytelegramserver@outlook.com>
1 parent e7550db commit 3762343

File tree

5 files changed

+32
-28
lines changed

5 files changed

+32
-28
lines changed

Minio.Tests/UtilsTest.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -159,10 +159,10 @@ public void TestInvalidCOPYPartSize()
159159
public void TestValidPartSize1()
160160
{
161161
// { partSize = 550502400, partCount = 9987, lastPartSize = 241172480 }
162-
dynamic partSizeObject = Utils.CalculateMultiPartSize(5497558138880);
163-
double partSize = partSizeObject.partSize;
164-
double partCount = partSizeObject.partCount;
165-
double lastPartSize = partSizeObject.lastPartSize;
162+
var partSizeObject = Utils.CalculateMultiPartSize(5497558138880);
163+
var partSize = partSizeObject.PartSize;
164+
var partCount = partSizeObject.PartCount;
165+
var lastPartSize = partSizeObject.LastPartSize;
166166
Assert.AreEqual(partSize, 553648128);
167167
Assert.AreEqual(partCount, 9930);
168168
Assert.AreEqual(lastPartSize, 385875968);
@@ -171,10 +171,10 @@ public void TestValidPartSize1()
171171
[TestMethod]
172172
public void TestValidPartSize2()
173173
{
174-
dynamic partSizeObject = Utils.CalculateMultiPartSize(500000000000, true);
175-
double partSize = partSizeObject.partSize;
176-
double partCount = partSizeObject.partCount;
177-
double lastPartSize = partSizeObject.lastPartSize;
174+
var partSizeObject = Utils.CalculateMultiPartSize(500000000000, true);
175+
var partSize = partSizeObject.PartSize;
176+
var partCount = partSizeObject.PartCount;
177+
var lastPartSize = partSizeObject.LastPartSize;
178178
Assert.AreEqual(partSize, 536870912);
179179
Assert.AreEqual(partCount, 932);
180180
Assert.AreEqual(lastPartSize, 173180928);

Minio/ApiEndpoints/ObjectOperations.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -874,10 +874,10 @@ private async Task<IDictionary<int, string>> PutObjectPartAsync(PutObjectPartArg
874874
CancellationToken cancellationToken = default)
875875
{
876876
args?.Validate();
877-
dynamic multiPartInfo = Utils.CalculateMultiPartSize(args.ObjectSize);
878-
double partSize = multiPartInfo.partSize;
879-
double partCount = multiPartInfo.partCount;
880-
double lastPartSize = multiPartInfo.lastPartSize;
877+
var multiPartInfo = Utils.CalculateMultiPartSize(args.ObjectSize);
878+
var partSize = multiPartInfo.PartSize;
879+
var partCount = multiPartInfo.PartCount;
880+
var lastPartSize = multiPartInfo.LastPartSize;
881881
var totalParts = new Part[(int)partCount];
882882

883883
var expectedReadSize = partSize;
@@ -947,10 +947,10 @@ private async Task<IDictionary<int, string>> PutObjectPartAsync(PutObjectPartArg
947947
private async Task MultipartCopyUploadAsync(MultipartCopyUploadArgs args,
948948
CancellationToken cancellationToken = default)
949949
{
950-
dynamic multiPartInfo = Utils.CalculateMultiPartSize(args.CopySize, true);
951-
double partSize = multiPartInfo.partSize;
952-
double partCount = multiPartInfo.partCount;
953-
double lastPartSize = multiPartInfo.lastPartSize;
950+
var multiPartInfo = Utils.CalculateMultiPartSize(args.CopySize, true);
951+
var partSize = multiPartInfo.PartSize;
952+
var partCount = multiPartInfo.PartCount;
953+
var lastPartSize = multiPartInfo.LastPartSize;
954954
var totalParts = new Part[(int)partCount];
955955

956956
var nmuArgs = new NewMultipartUploadCopyArgs()
@@ -1358,10 +1358,10 @@ private async Task MultipartCopyUploadAsync(string bucketName, string objectName
13581358
{
13591359
// For all sizes greater than 5GB or if Copy byte range specified in conditions and byte range larger
13601360
// than minimum part size (5 MB) do multipart.
1361-
dynamic multiPartInfo = Utils.CalculateMultiPartSize(copySize, true);
1362-
double partSize = multiPartInfo.partSize;
1363-
double partCount = multiPartInfo.partCount;
1364-
double lastPartSize = multiPartInfo.lastPartSize;
1361+
var multiPartInfo = Utils.CalculateMultiPartSize(copySize, true);
1362+
var partSize = multiPartInfo.PartSize;
1363+
var partCount = multiPartInfo.PartCount;
1364+
var lastPartSize = multiPartInfo.LastPartSize;
13651365
var totalParts = new Part[(int)partCount];
13661366

13671367
var sseHeaders = new Dictionary<string, string>(StringComparer.Ordinal);

Minio/DataModel/MultiPartInfo.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace Minio.DataModel;
2+
3+
public class MultiPartInfo
4+
{
5+
public double PartSize { get; set; }
6+
public double PartCount { get; set; }
7+
public double LastPartSize { get; set; }
8+
}

Minio/Helper/Utils.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
using System.ComponentModel;
1818
using System.Diagnostics.CodeAnalysis;
19-
using System.Dynamic;
2019
using System.Globalization;
2120
using System.Reflection;
2221
using System.Security.Cryptography;
@@ -26,6 +25,7 @@
2625
using System.Xml;
2726
using System.Xml.Linq;
2827
using System.Xml.Serialization;
28+
using Minio.DataModel;
2929
using Minio.Exceptions;
3030
#if !NET6_0_OR_GREATER
3131
using System.Collections.Concurrent;
@@ -265,7 +265,7 @@ public static bool CaseInsensitiveContains(string text, string value,
265265
/// <param name="size"></param>
266266
/// <param name="copy"> If true, use COPY part size, else use PUT part size</param>
267267
/// <returns></returns>
268-
public static object CalculateMultiPartSize(long size, bool copy = false)
268+
public static MultiPartInfo CalculateMultiPartSize(long size, bool copy = false)
269269
{
270270
if (size == -1) size = Constants.MaximumStreamObjectSize;
271271

@@ -278,11 +278,8 @@ public static object CalculateMultiPartSize(long size, bool copy = false)
278278
partSize = (double)Math.Ceiling((decimal)partSize / minPartSize) * minPartSize;
279279
var partCount = Math.Ceiling(size / partSize);
280280
var lastPartSize = size - ((partCount - 1) * partSize);
281-
dynamic obj = new ExpandoObject();
282-
obj.partSize = partSize;
283-
obj.partCount = partCount;
284-
obj.lastPartSize = lastPartSize;
285-
return obj;
281+
282+
return new MultiPartInfo { PartSize = partSize, PartCount = partCount, LastPartSize = lastPartSize };
286283
}
287284

288285
/// <summary>

Minio/Minio.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
2626
<PackageReference Include="System.Text.Json" Version="7.0.3" />
2727
<PackageReference Include="System.Security.Cryptography.Algorithms" Version="4.3.1" />
28-
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
2928
</ItemGroup>
3029

3130
</Project>

0 commit comments

Comments
 (0)