ऐसा लगता है कि आप वास्तव में यहां क्या कर रहे हैं, इनबिल्ट मुक्केबाजी के साथ मैन्युअल मुक्केबाजी की तुलना कर रहा है। इनबिल्ट मुक्केबाजी को अत्यधिक अनुकूलित किया गया है - इसलिए मुझे यहां एक बड़ा अंतर देखने की उम्मीद नहीं है, लेकिन हम जांच सकते हैं। महत्वपूर्ण रूप से, ध्यान दें कि दोनों के पास समान स्मृति प्रभाव है: एक हीप ऑब्जेक्ट जिसमें int
फ़ील्ड है, प्रति int
बॉक्सिंग/लपेटा गया है।
निम्नलिखित दो संपर्कों के लिए बहुत समान समय दिखाता है; मैं कहूंगा, इसलिए, बस इसे प्रत्यक्ष/अंतर्निहित तरीके से बॉक्स करें।
नोट: इसे डिबगर के बिना रिलीज़ मोड में चलाएं (आदर्श रूप से कमांड लाइन पर)। ध्यान दें कि पहली कॉल प्री-जेआईटी सब कुछ है।
using System;
using System.Diagnostics;
public sealed class IntObj
{
public readonly int Value;
public IntObj(int value)
{
Value = value;
}
}
static class Program
{
static void Main()
{
Run(1, 0, false);
Run(100000, 500, true);
Console.ReadKey();
}
static void Run(int length, int repeat, bool report)
{
var data = new object[length];
int chk = 0;
var watch = Stopwatch.StartNew();
for (int j = 0; j < repeat; j++)
{
for (int i = 0; i < data.Length; i++)
{
data[i] = i;
chk += i;
}
}
watch.Stop();
if(report) Console.WriteLine("Box: {0}ms (chk: {1})", watch.ElapsedMilliseconds, chk);
chk = 0;
watch = Stopwatch.StartNew();
for (int j = 0; j < repeat; j++)
{
for (int i = 0; i < data.Length; i++)
{
chk += (int) data[i];
}
}
watch.Stop();
if (report) Console.WriteLine("Unbox: {0}ms (chk: {1})", watch.ElapsedMilliseconds, chk);
chk = 0;
watch = Stopwatch.StartNew();
for (int j = 0; j < repeat; j++)
{
for (int i = 0; i < data.Length; i++)
{
data[i] = new IntObj(i);
chk += i;
}
}
watch.Stop();
if (report) Console.WriteLine("Wrap: {0}ms (chk: {1})", watch.ElapsedMilliseconds, chk);
chk = 0;
watch = Stopwatch.StartNew();
for (int j = 0; j < repeat; j++)
{
for (int i = 0; i < data.Length; i++)
{
chk += ((IntObj)data[i]).Value;
}
}
watch.Stop();
if (report) Console.WriteLine("Unwrap: {0}ms (chk: {1})", watch.ElapsedMilliseconds, chk);
}
}
स्रोत
2012-09-06 07:30:55
मैंने इसे माप नहीं लिया है, लेकिन मैं कहूंगा कि प्राइमेटिव तेज होंगे। एक वस्तु ऊपर की ओर है। लेकिन इस मामले में मुझे लगता है कि पठनीयता एक बहुत ही महत्वपूर्ण उपाय है। सीपीयू चक्र मस्तिष्क चक्रों से बहुत सस्ता हैं –