हां, ये विधियां काफी अधिक हैं (*) वही हैं। केवल अंतर यह है कि पहले में ब्रेकपॉइंट रखना आसान है। मैं हमेशा दूसरे के साथ जाऊंगा जब तक कि मुझे वास्तव में वहां तोड़ने की ज़रूरत नहीं होती और केवल वहां (जैसा कि तुरंत उस प्रकार के किसी भी अपवाद को फेंक दिया गया था, जो आसान होगा)। यहां तक कि अगर मैंने पहले कभी भी इस्तेमाल किया है, तो भी मैं इसे कोड करने से पहले इसे दूसरे फॉर्म में वापस रखूंगा।
(*) जेआईटी उन्हें कैसे संभालता है इस मामले में कुछ मतभेद हो सकते हैं। पहला आईएल के साथ खत्म हो जाएगा, जो इनलाइनिंग आदि के अवसरों को प्रभावित करेगा।
संपादित करें: मैं माइक्रो-बेंचमार्किंग का थोड़ा सा विरोध नहीं कर सकता।
सरल विधि: 504, 495, 489
using System;
using System.Diagnostics;
using System.Runtime.CompilerServices;
public class Test
{
const int Iterations = 1000000000;
static void Main()
{
Stopwatch sw;
sw = Stopwatch.StartNew();
for (int i=0; i < Iterations; i++)
{
SimpleMethod();
}
sw.Stop();
Console.WriteLine("Simple method: {0}", sw.ElapsedMilliseconds);
sw = Stopwatch.StartNew();
for (int i=0; i < Iterations; i++)
{
NoInlining();
}
sw.Stop();
Console.WriteLine("No inlining: {0}", sw.ElapsedMilliseconds);
sw = Stopwatch.StartNew();
for (int i=0; i < Iterations; i++)
{
TryCatchThrow();
}
sw.Stop();
Console.WriteLine("try/catch/throw: {0}", sw.ElapsedMilliseconds);
}
static void SimpleMethod()
{
Foo();
}
[MethodImpl(MethodImplOptions.NoInlining)]
static void NoInlining()
{
}
static void TryCatchThrow()
{
try
{
Foo();
}
catch (Exception)
{
throw;
}
}
static void Foo() {}
}
साथ /o+ /debug-
परिणाम (तीन रन) संकलित: यह ट्राई/कैच की तरह दिखता है/फेंक सिर्फ अक्षम करने इनलाइन किए जाने वाले की तुलना में प्रदर्शन पर nastier असर पड़ता है
नहीं इनलाइनिंग: 2977, 3060, 3019
ट्राई/कैच/फेंक: 5274, 4543, 5145
स्रोत
2009-01-10 21:23:04
जब तक आप अंत में कुछ सफाई काम करने के लिए ब्लॉक की जरूरत है:
सबसे अच्छा एक अपवाद को पकड़ने के लिए कारण स्टैक ट्रेस करने के लिए प्रसंग जोड़ने के लिए, की तरह है। –
@Fred: वह 'आखिरकार कोशिश करें' तो 'try..catch' नहीं, सही होगा? – AnthonyWJones