क्लोन() और toArray() वाक्य रचना अच्छा है क्योंकि आप एक गंतव्य सरणी पूर्व आवंटित करने के लिए की जरूरत नहीं है रहे हैं, लेकिन प्रदर्शन के मामले में, Array.Copy() सबसे तेजी से विधि (चेतावनी नीचे देखें है)।
Array.Copy() इतनी तेजी से होने का कारण यह है कि यह किसी भी स्मृति को आवंटित नहीं करता है। हालांकि, अगर आपको हर बार स्मृति के नए क्षेत्र में प्रतिलिपि बनाने के लिए अपने सरणी की आवश्यकता होती है, तो Array.Copy() अब सबसे तेज़ तरीका नहीं है।
यहाँ मेरी प्रदर्शन परिणाम हैं:
Copy: 0 ms
Copy (with allocation): 449 ms
Clone: 323 ms
ToArray: 344 ms
और यहाँ कोड मैं प्रयोग किया जाता है:
const int arrayLength = 100000;
const int numberCopies = 1000;
var a = new int[arrayLength];
var b = new int[arrayLength];
var stopwatch = new Stopwatch();
for (var i = 0; i < numberCopies; i++) {
Array.Copy(a, b, arrayLength);
}
Console.WriteLine($"Copy: {stopwatch.ElapsedMilliseconds} ms");
stopwatch.Restart();
for (var i = 0; i < numberCopies; i++) {
var c = new int[arrayLength];
Array.Copy(a, c, arrayLength);
}
Console.WriteLine($"Copy (with allocation): {stopwatch.ElapsedMilliseconds} ms");
stopwatch.Restart();
for (var i = 0; i < numberCopies; i++) {
b = (int[]) a.Clone();
}
Console.WriteLine($"Clone: {stopwatch.ElapsedMilliseconds} ms");
stopwatch.Restart();
for (var i = 0; i < numberCopies; i++) {
b = a.ToArray();
}
Console.WriteLine($"ToArray: {stopwatch.ElapsedMilliseconds} ms");
तुम सिर्फ का उपयोग नहीं किया जा सका 'Array.Copy'? –
सभी मेमोरी को सीधे कॉपी करने का एक तरीका होना चाहिए ... सी ++ में http://stackoverflow.com/questions/3902215/using-memcpy-to-copy-a-range-of-elements-from-an-array –
http: // stackoverflow।कॉम/प्रश्न/5655553/सबसे-कुशल-तरीके-प्रति-प्रति-तत्व-ए-तेज-बहु-आयामी-एआर –