मैंने अपनी कस्टम ऑब्जेक्ट्स पर LINQ सॉर्टिंग से Array.Sort की तुलना करने के लिए त्वरित परीक्षण एप्लिकेशन बनाया। ऐरे .ॉर्ट बहुत धीमा लगता है!LINQ की तुलना में Array.Sort() इतनी धीमी क्यों है?
class Person : IComparable<Person>
{
public int Age { get; set; }
public string Name { get; set; }
public int CompareTo(Person obj)
{
return this.Age.CompareTo(obj.Age);
}
public Person()
{ }
}
तो मैं मुख्य() में अपने परीक्षण व्यक्तियों बनाया:
string name = "Mr. Tomek";
Random r = new Random();
int size = 10000000;
DateTime start, end;
Person[] people1 = new Person[size];
Person[] people2 = new Person[size];
for (int i = 0; i < size; i++)
{
people1[i] = new Person();
people1[i].Age = r.Next(0, 10000);
people1[i].Name = name;
people2[i] = new Person();
people2[i].Age = people1[i].Age;
people2[i].Name = people1[i].Name;
}
Array.Sort द्वारा सॉर्ट करने के लिए लिया है कि मैं मापा जाता है समय के बाद
मैं इस तरह अपने कस्टम वर्ग बनाया और LINQ द्वारा:
start = DateTime.Now;
var sort = from s in people2
orderby s.Age
select s;
end = DateTime.Now;
Console.WriteLine("LINQ: ");
Console.WriteLine((end - start).TotalMilliseconds);
start = DateTime.Now;
Array.Sort(people1,((Person p1, Person p2)=>{return p1.CompareTo(p2);}));
end = DateTime.Now;
Console.WriteLine("IComparable: ");
Console.WriteLine((end - start).TotalMilliseconds);
Console.ReadLine();
Linq समय: के बारे में 1 या 2 मिलीसेकंड
ऐरे .ॉर्ट: 16 सेकंड्स से अधिक!
सभी सरणी क्रमबद्ध की जाती हैं (LINQ नए संग्रह और पत्तियां ओरिजिनल सरणी को बिना छेड़छाड़ करती है) लेकिन Array.Sort बेहद धीमी है! इसे कैसे समझाया जा सकता है? (DEBUG और रिलीज मोड में Array.Sort अत्यंत विफल रहता है)
मैंने Array.Sort के साथ सॉर्ट करते समय लैम्ब्डा अभिव्यक्ति के साथ कोड चिपकाया लेकिन यह इसके साथ और इसके समान है। (कक्षा व्यक्ति IComparable इंटरफ़ेस लागू करता है)
आपको मेरे संबंधित प्रश्न में रुचि हो सकती है। http://stackoverflow.com/questions/10110013/order-of-linq-extension-methods-does-not-affect-performance –
@TomaszSikora: आप बस 'Array.Sort (people1)' को कॉल करके सॉर्ट कर सकते हैं, क्योंकि 'IComparable' कार्यान्वयन स्वचालित रूप से उपयोग किया जाता है। –
मैंने कुछ नोटिस किया ... बड़े सरणी को सॉर्ट करते समय लिंक तेज है। Array.Sort तेज है जब ऐरे 100 000 से कम तत्वों से कम है। ऐसा क्यों हो रहा है? –