इसमें IList<T>
लागू करने वाली किसी भी चीज़ के लिए अनुकूलन शामिल है, इस स्थिति में यह केवल लंबाई -1 पर आइटम को देखता है।
ध्यान रखें कि सामान के विशाल बहुमत आप में भेज देंगे IList<T>
List<int>
int[]
और इतने पर लागू करेगा ... सभी को लागू IList<T>
जो लोग कोड में नहीं देख सकते हैं के लिए
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace ConsoleApplication4 {
class Program {
static void Profile(string description, int iterations, Action func) {
// clean up
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
// warm up
func();
var watch = Stopwatch.StartNew();
for (int i = 0; i < iterations; i++) {
func();
}
watch.Stop();
Console.Write(description);
Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds);
}
static void Main(string[] args) {
int[] nums = Enumerable.Range(1, 1000000).ToArray();
int a;
Profile("Raw performance", 100000,() => { a = nums[nums.Length - 1]; });
Profile("With Last", 100000,() => { a = nums.Last(); });
Console.ReadKey();
}
}
}
आउटपुट::
0,123,516 पुष्टि करते हैं, आप इसे अवलोकन का उपयोग कर पुष्टि कर सकते हैं
Raw performance Time Elapsed 1 ms
With Last Time Elapsed 31 ms
तो यह केवल 30 गुना धीमा है और आपके पास जो भी लंबाई सूची है, उस प्रदर्शन प्रोफ़ाइल को बनाए रखता है, जो चीजों की बड़ी योजना में कुछ भी नहीं है।
स्रोत
2009-09-04 08:16:00
इटरेटर के लिए विरासत का पेड़ क्या है? सी ++ में पहले स्थान पर एक्सटेंशन विधियां नहीं हैं, इसलिए 'वेक्टर' पर 'एंड() 'को' सूची 'से अलग तरीके से कार्यान्वित किया गया है, और जो भी किसी के लिए इटरेटर के साथ काम करना चाहता है वह' टेम्पलेट 'होना चाहिए 'Iterator' प्रकार पैरामीटर पर। –