मेरे पास लूप के लिए दो हैं जो मूल रूप से दो अलग-अलग सरणी में दिखते हैं (प्रत्येक में चोटी पर 2-4k आकार होता है) और इन मानों के आधार पर एक 3 सरणी में मान सेट करें। कुछ अजीब कारणों के लिए कोड के इस टुकड़े के प्रदर्शन के बीच एक कारक दो अंतर है, जिस पर मैं दो लूप के लिए दो ऑर्डर देता हूं।यह प्रदर्शन में सुधार क्यों करता है?
यह पहला सेटअप है। यह 150 में ~ मेरी पीसी पर मिलीसेकेंड कार्यान्वित:
public static int[] SchoolMultiplication(int[] a, int[] b, int numberBase)
{
List<double> times = new List<double>();
TimeTest timeTest = new TimeTest();
int aLen = a.Length;
int bLen = b.Length;
int[,] resultMatrix = new int[a.Length + b.Length, aLen];
int[] result = new int[a.Length + b.Length];
timeTest.Start();
for (int horizontalIndex = 0; horizontalIndex < b.Length; horizontalIndex++)
{
for (int verticalIndex = 0; verticalIndex < a.Length; verticalIndex++)
{
resultMatrix[a.Length + b.Length - 1 - verticalIndex - horizontalIndex, verticalIndex] = a[a.Length - verticalIndex - 1] * b[b.Length - horizontalIndex - 1];
}
}
अब अगर मैं इस
for (int verticalIndex = 0; verticalIndex < a.Length; verticalIndex++)
{
for (int horizontalIndex = 0; horizontalIndex < b.Length; horizontalIndex++)
{
resultMatrix[a.Length + b.Length - 1 - verticalIndex - horizontalIndex, verticalIndex] = a[a.Length - verticalIndex - 1] * b[b.Length - horizontalIndex - 1];
}
}
की तरह लेकिन छोरों के आदेश में कुछ भी नहीं बदल विधि के कुल समय चल रहा है के बारे में ~ 400 मिलीसेकेंड के लिए चला जाता है । लूप ऑर्डर का एक सरल विनिमय लगभग 300% तक प्रदर्शन में सुधार कैसे करता है? मुझे लगता है कि यह किसी प्रकार का कैशिंग या पॉइंटर प्रदर्शन की बात है?
यहां देखें: http://stackoverflow.com/questions/997212/fastest-way-to-loop-through-a-2d-array –
'ए' और' बी' की लंबाई क्या हैं? –
उत्तर ठीक उसी लिंक में से एक है जिसे @ माइक डेनियल प्रदान किए गए हैं। यह एक बहुत ही ज्ञात कैश से संबंधित समस्या/अनुकूलन उदाहरण है। –