Skip to content

Commit 34d7862

Browse files
loyldgmartijn00
authored andcommitted
perf:Replace dynamic with class for better performance
Fix:NativeAOT build issue
1 parent 4723be8 commit 34d7862

File tree

4 files changed

+38
-27
lines changed

4 files changed

+38
-27
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+
double partSize = partSizeObject.PartSize;
164+
double partCount = partSizeObject.PartCount;
165+
double 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+
double partSize = partSizeObject.PartSize;
176+
double partCount = partSizeObject.PartCount;
177+
double 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
@@ -865,10 +865,10 @@ private async Task<IDictionary<int, string>> PutObjectPartAsync(PutObjectPartArg
865865
CancellationToken cancellationToken = default)
866866
{
867867
args?.Validate();
868-
dynamic multiPartInfo = Utils.CalculateMultiPartSize(args.ObjectSize);
869-
double partSize = multiPartInfo.partSize;
870-
double partCount = multiPartInfo.partCount;
871-
double lastPartSize = multiPartInfo.lastPartSize;
868+
var multiPartInfo = Utils.CalculateMultiPartSize(args.ObjectSize);
869+
double partSize = multiPartInfo.PartSize;
870+
double partCount = multiPartInfo.PartCount;
871+
double lastPartSize = multiPartInfo.LastPartSize;
872872
var totalParts = new Part[(int)partCount];
873873

874874
var expectedReadSize = partSize;
@@ -936,10 +936,10 @@ private async Task<IDictionary<int, string>> PutObjectPartAsync(PutObjectPartArg
936936
private async Task MultipartCopyUploadAsync(MultipartCopyUploadArgs args,
937937
CancellationToken cancellationToken = default)
938938
{
939-
dynamic multiPartInfo = Utils.CalculateMultiPartSize(args.CopySize, true);
940-
double partSize = multiPartInfo.partSize;
941-
double partCount = multiPartInfo.partCount;
942-
double lastPartSize = multiPartInfo.lastPartSize;
939+
var multiPartInfo = Utils.CalculateMultiPartSize(args.CopySize, true);
940+
double partSize = multiPartInfo.PartSize;
941+
double partCount = multiPartInfo.PartCount;
942+
double lastPartSize = multiPartInfo.LastPartSize;
943943
var totalParts = new Part[(int)partCount];
944944

945945
var nmuArgs = new NewMultipartUploadCopyArgs()
@@ -1345,10 +1345,10 @@ private async Task MultipartCopyUploadAsync(string bucketName, string objectName
13451345
{
13461346
// For all sizes greater than 5GB or if Copy byte range specified in conditions and byte range larger
13471347
// than minimum part size (5 MB) do multipart.
1348-
dynamic multiPartInfo = Utils.CalculateMultiPartSize(copySize, true);
1349-
double partSize = multiPartInfo.partSize;
1350-
double partCount = multiPartInfo.partCount;
1351-
double lastPartSize = multiPartInfo.lastPartSize;
1348+
var multiPartInfo = Utils.CalculateMultiPartSize(copySize, true);
1349+
double partSize = multiPartInfo.PartSize;
1350+
double partCount = multiPartInfo.PartCount;
1351+
double lastPartSize = multiPartInfo.LastPartSize;
13521352
var totalParts = new Part[(int)partCount];
13531353

13541354
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: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
using System.Xml;
2626
using System.Xml.Linq;
2727
using System.Xml.Serialization;
28+
using Minio.DataModel;
2829
using Minio.Exceptions;
2930
#if !NET6_0_OR_GREATER
3031
using System.Collections.Concurrent;
@@ -241,7 +242,7 @@ public static bool CaseInsensitiveContains(string text, string value,
241242
/// <param name="size"></param>
242243
/// <param name="copy"> If true, use COPY part size, else use PUT part size</param>
243244
/// <returns></returns>
244-
public static object CalculateMultiPartSize(long size, bool copy = false)
245+
public static MultiPartInfo CalculateMultiPartSize(long size, bool copy = false)
245246
{
246247
if (size == -1) size = Constants.MaximumStreamObjectSize;
247248

@@ -253,12 +254,14 @@ public static object CalculateMultiPartSize(long size, bool copy = false)
253254
var minPartSize = copy ? Constants.MinimumCOPYPartSize : Constants.MinimumPUTPartSize;
254255
partSize = (double)Math.Ceiling((decimal)partSize / minPartSize) * minPartSize;
255256
var partCount = Math.Ceiling(size / partSize);
256-
var lastPartSize = size - ((partCount - 1) * partSize);
257-
dynamic obj = new ExpandoObject();
258-
obj.partSize = partSize;
259-
obj.partCount = partCount;
260-
obj.lastPartSize = lastPartSize;
261-
return obj;
257+
var lastPartSize = size - (partCount - 1) * partSize;
258+
259+
return new MultiPartInfo
260+
{
261+
PartSize = partSize,
262+
PartCount = partCount,
263+
LastPartSize = lastPartSize
264+
};
262265
}
263266

264267
/// <summary>

0 commit comments

Comments
 (0)