मैं इस मुद्दे को सत्यापित करने के लिए गया था। मेरे गंदे परीक्षणों पर आश्चर्यचकित रूप से पता चलता है कि हर समय दूसरा विकल्प थोड़ा और भी तेज है।
namespace Test
{
class Foreach
{
string[] names = new[] { "ABC", "MNL", "XYZ" };
void Method1()
{
List<User> list = new List<User>();
User u;
foreach (string s in names)
{
u = new User();
u.Name = s;
list.Add(u);
}
}
void Method2()
{
List<User> list = new List<User>();
foreach (string s in names)
{
User u = new User();
u.Name = s;
list.Add(u);
}
}
}
public class User { public string Name; }
}
मैंने सीआईएल को सत्यापित किया लेकिन यह समान नहीं है।
इसलिए मैंने कुछ तैयार किया जो मैं बहुत बेहतर परीक्षण करना चाहता था।
namespace Test
{
class Loop
{
public TimeSpan method1 = new TimeSpan();
public TimeSpan method2 = new TimeSpan();
Stopwatch sw = new Stopwatch();
public void Method1()
{
sw.Restart();
C c;
C c1;
C c2;
C c3;
C c4;
int i = 1000;
while (i-- > 0)
{
c = new C();
c1 = new C();
c2 = new C();
c3 = new C();
c4 = new C();
}
sw.Stop();
method1 = method1.Add(sw.Elapsed);
}
public void Method2()
{
sw.Restart();
int i = 1000;
while (i-- > 0)
{
var c = new C();
var c1 = new C();
var c2 = new C();
var c3 = new C();
var c4 = new C();
}
sw.Stop();
method2 = method2.Add(sw.Elapsed);
}
}
class C { }
}
इस मामले में भी दूसरा तरीका हमेशा जीत रहा था लेकिन फिर मैंने सीआईएल को सत्यापित कर दिया कि कोई अंतर नहीं है।
मैं सीआईएल-रीडिंग गुरु नहीं हूं, लेकिन मुझे कोई घोषणा का मुद्दा दिखाई नहीं देता है। जैसा कि पहले ही बताया गया था कि घोषणा आवंटन नहीं है, इसलिए इस पर कोई प्रदर्शन जुर्माना नहीं है।
परीक्षा
namespace Test
{
class Foreach
{
string[] names = new[] { "ABC", "MNL", "XYZ" };
public TimeSpan method1 = new TimeSpan();
public TimeSpan method2 = new TimeSpan();
Stopwatch sw = new Stopwatch();
void Method1()
{
sw.Restart();
List<User> list = new List<User>();
User u;
foreach (string s in names)
{
u = new User();
u.Name = s;
list.Add(u);
}
sw.Stop();
method1 = method1.Add(sw.Elapsed);
}
void Method2()
{
sw.Restart();
List<User> list = new List<User>();
foreach (string s in names)
{
User u = new User();
u.Name = s;
list.Add(u);
}
sw.Stop();
method2 = method2.Add(sw.Elapsed);
}
}
public class User { public string Name; }