From 4220f7e88571dd80f7f4c49d41bdf669a9b0f7d5 Mon Sep 17 00:00:00 2001 From: Jay Cho Date: Sun, 2 Aug 2026 20:04:22 +0900 Subject: [PATCH] Refactor: Pre-size MediaVision result lists with known native count (Fixes #7700) The five Inference*Result constructors and four legacy GetResults helpers read the exact element count from native code but built their List with default capacity, causing repeated backing-array reallocations on the per-frame hot path. Pass the known count/number as the initial capacity so a single right-sized array is allocated. List contents and order are unchanged. Co-Authored-By: Claude Fable 5 --- src/Tizen.Multimedia.Vision/MediaVision/FaceDetector.cs | 2 +- .../MediaVision/FacialLandmarkDetector.cs | 2 +- src/Tizen.Multimedia.Vision/MediaVision/ImageClassifier.cs | 2 +- .../MediaVision/InferenceFaceDetectorResult.cs | 2 +- .../MediaVision/InferenceFacialLandmarkDetectorResult.cs | 2 +- .../MediaVision/InferenceImageClassifierResult.cs | 2 +- .../MediaVision/InferenceObjectDetectorResult.cs | 2 +- .../MediaVision/InferencePoseLandmarkDetectorResult.cs | 2 +- src/Tizen.Multimedia.Vision/MediaVision/ObjectDetector.cs | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Tizen.Multimedia.Vision/MediaVision/FaceDetector.cs b/src/Tizen.Multimedia.Vision/MediaVision/FaceDetector.cs index d9bc59253a6..e6abe42492e 100755 --- a/src/Tizen.Multimedia.Vision/MediaVision/FaceDetector.cs +++ b/src/Tizen.Multimedia.Vision/MediaVision/FaceDetector.cs @@ -188,7 +188,7 @@ private static IEnumerable GetResults(int number, float[] c return Enumerable.Empty(); } - var results = new List(); + var results = new List(number); for (int i = 0; i < number; i++) { diff --git a/src/Tizen.Multimedia.Vision/MediaVision/FacialLandmarkDetector.cs b/src/Tizen.Multimedia.Vision/MediaVision/FacialLandmarkDetector.cs index 27f53c49cff..32ac9e41965 100755 --- a/src/Tizen.Multimedia.Vision/MediaVision/FacialLandmarkDetector.cs +++ b/src/Tizen.Multimedia.Vision/MediaVision/FacialLandmarkDetector.cs @@ -126,7 +126,7 @@ private static IEnumerable GetResults(int number, global::Interop.MediaVi return Enumerable.Empty(); } - var results = new List(); + var results = new List(number); for (int i = 0; i < number; i++) { diff --git a/src/Tizen.Multimedia.Vision/MediaVision/ImageClassifier.cs b/src/Tizen.Multimedia.Vision/MediaVision/ImageClassifier.cs index 8b71f375704..4fa689f7631 100755 --- a/src/Tizen.Multimedia.Vision/MediaVision/ImageClassifier.cs +++ b/src/Tizen.Multimedia.Vision/MediaVision/ImageClassifier.cs @@ -122,7 +122,7 @@ private static IEnumerable GetResults(int number, int return Enumerable.Empty(); } - var results = new List(); + var results = new List(number); for (int i = 0; i < number; i++) { diff --git a/src/Tizen.Multimedia.Vision/MediaVision/InferenceFaceDetectorResult.cs b/src/Tizen.Multimedia.Vision/MediaVision/InferenceFaceDetectorResult.cs index 7050d37226c..bcd8c56770e 100755 --- a/src/Tizen.Multimedia.Vision/MediaVision/InferenceFaceDetectorResult.cs +++ b/src/Tizen.Multimedia.Vision/MediaVision/InferenceFaceDetectorResult.cs @@ -32,7 +32,7 @@ internal InferenceFaceDetectorResult(IntPtr handle) Validate("Failed to get result count."); RequestId = requestId; - var boundingBoxes = new List(); + var boundingBoxes = new List((int)count); for (uint i = 0 ; i < count ; i++) { diff --git a/src/Tizen.Multimedia.Vision/MediaVision/InferenceFacialLandmarkDetectorResult.cs b/src/Tizen.Multimedia.Vision/MediaVision/InferenceFacialLandmarkDetectorResult.cs index 67b7b752ac8..f8da9a2f165 100755 --- a/src/Tizen.Multimedia.Vision/MediaVision/InferenceFacialLandmarkDetectorResult.cs +++ b/src/Tizen.Multimedia.Vision/MediaVision/InferenceFacialLandmarkDetectorResult.cs @@ -33,7 +33,7 @@ internal InferenceFacialLandmarkDetectorResult(IntPtr handle) Validate("Failed to get result count."); RequestId = requestId; - var points = new List(); + var points = new List((int)count); for (uint i = 0 ; i < count ; i++) { diff --git a/src/Tizen.Multimedia.Vision/MediaVision/InferenceImageClassifierResult.cs b/src/Tizen.Multimedia.Vision/MediaVision/InferenceImageClassifierResult.cs index 70b59184c68..a18b2aacd89 100755 --- a/src/Tizen.Multimedia.Vision/MediaVision/InferenceImageClassifierResult.cs +++ b/src/Tizen.Multimedia.Vision/MediaVision/InferenceImageClassifierResult.cs @@ -33,7 +33,7 @@ internal InferenceImageClassifierResult(IntPtr handle) Validate("Failed to get result count."); RequestId = requestId; - var labels = new List(); + var labels = new List((int)count); for (uint i = 0 ; i < count ; i++) { diff --git a/src/Tizen.Multimedia.Vision/MediaVision/InferenceObjectDetectorResult.cs b/src/Tizen.Multimedia.Vision/MediaVision/InferenceObjectDetectorResult.cs index 090031aa46a..f4e14a70f95 100755 --- a/src/Tizen.Multimedia.Vision/MediaVision/InferenceObjectDetectorResult.cs +++ b/src/Tizen.Multimedia.Vision/MediaVision/InferenceObjectDetectorResult.cs @@ -32,7 +32,7 @@ internal InferenceObjectDetectorResult(IntPtr handle) Validate("Failed to get result count."); RequestId = requestId; - var boundingBoxes = new List(); + var boundingBoxes = new List((int)count); for (uint i = 0 ; i < count ; i++) { diff --git a/src/Tizen.Multimedia.Vision/MediaVision/InferencePoseLandmarkDetectorResult.cs b/src/Tizen.Multimedia.Vision/MediaVision/InferencePoseLandmarkDetectorResult.cs index d7c9c16d713..51f355db0ea 100755 --- a/src/Tizen.Multimedia.Vision/MediaVision/InferencePoseLandmarkDetectorResult.cs +++ b/src/Tizen.Multimedia.Vision/MediaVision/InferencePoseLandmarkDetectorResult.cs @@ -33,7 +33,7 @@ internal InferencePoseLandmarkDetectorResult(IntPtr handle) Validate("Failed to get result count."); RequestId = requestId; - var points = new List(); + var points = new List((int)count); for (uint i = 0 ; i < count ; i++) { diff --git a/src/Tizen.Multimedia.Vision/MediaVision/ObjectDetector.cs b/src/Tizen.Multimedia.Vision/MediaVision/ObjectDetector.cs index 4b356a416c8..950658f1ad4 100755 --- a/src/Tizen.Multimedia.Vision/MediaVision/ObjectDetector.cs +++ b/src/Tizen.Multimedia.Vision/MediaVision/ObjectDetector.cs @@ -101,7 +101,7 @@ private static IEnumerable GetResults(int number, int[] i return Enumerable.Empty(); } - var results = new List(); + var results = new List(number); for (int i = 0; i < number; i++) {