2010-07-12 16 views
12

एफ # इंटरएक्टिव (और सामान्य आरपीएल-स्टाइल टूल्स में) प्रदर्शन प्रोफाइलिंग के लिए एक आदर्श प्रवेश द्वार है। कोड ब्लॉक का चयन करने और इसे एक प्रोफाइलर को सही भेजने के लिए क्या आसान हो सकता है जो प्रदर्शन विश्लेषण रिपोर्ट के साथ वापस आ जाएगा। दुर्भाग्यवश ऐसा लगता है कि मौजूदा प्रोफाइलरों के पास आरईपीएल समर्थन नहीं है: आपको या तो प्रक्रिया में एक प्रोफाइलर संलग्न करना होगा या निर्दिष्ट करने के लिए निर्दिष्ट और निष्पादन योग्य या वेब अनुप्रयोग करना होगा।एफ # इंटरैक्टिव और प्रदर्शन प्रोफाइलर्स

मैं जो कर रहा हूं वह एक इकाई परीक्षण में प्रोफ़ाइल के लिए एक कोड ब्लॉक लपेट रहा है और फिर NUnit कमांड लाइन सत्र के खिलाफ प्रोफ़ाइल निष्पादित कर रहा है। लेकिन क्या यह सबसे अच्छा है कि हम अभी एफ # के साथ कर सकते हैं?

+0

मैंने रेडगेट एएनटीएस प्रोफाइलर फोरम में एक प्रश्न पोस्ट किया, और उन्होंने कहा कि उन्हें विचार पसंद आया और यह विचार करेगा। –

+0

प्रोफाइलिंग के बारे में सोचने का एक और तरीका है - समय मापने और कॉल की गिनती के रूप में नहीं, लेकिन पूछने के रूप में "यह बिल्ली क्या कर रहा है?" - http://stackoverflow.com/questions/1777556/alternatives-to-gprof/1779343#1779343 –

उत्तर

9

प्रश्न क्या है?

क्या आप #time कमांड के बारे में जानते हैं? जैसे

#time "on" 
for i in 1..1000000 do 
    let r = f(i) 
    ignore r 

जो एफ # की तरह

--> Timing now on 
Real: 00:00:00.000, CPU: 00:00:00.000, GC gen0: 0, gen1: 0, gen2: 0 

इंटरैक्टिव उत्पादन किसी भी मामले में देता है, मैं बस एक आवेदन में कोड डालने और चल रहे एप्लिकेशन के खिलाफ प्रोफ़ाइल एक NUnit परीक्षण से बेहतर है लगता है। किसी भी तरह से, हाँ, यह कोड को एक नए ऐप में पेस्ट करने और इसे रिलीज़ मोड में संकलित करने के लिए शायद अतिरिक्त 30 सेकंड का समय लगता है। लेकिन यह एक कीमत है जो मुझे विजुअल स्टूडियो प्रदान करने वाली समृद्ध प्रोफाइल जानकारी प्राप्त करने के लिए भुगतान करने में प्रसन्नता है। आदर्श रूप से अनुभव बेहतर हो सकता है, लेकिन मुझे संदेह है कि आपको आज (या कल) कोई आरईपीएल-अनुकूल प्रोफाइलिंग टूल मिल जाएगा।

+0

हां, लेकिन यह केवल साधारण मामलों में उपयोगी है। यह आपको एक तस्वीर नहीं देता है कि कॉल स्टैक में संचालन के बीच निष्पादन समय कैसे विभाजित होता है। –

+0

और अपने प्रश्न का उत्तर देने के लिए "प्रश्न क्या है?": प्रश्न बाहरी कॉल के निष्पादन के समय के बारे में नहीं है। प्रश्न प्रदर्शन प्रोफाइलिंग के बारे में है जो उससे कहीं अधिक है: यह एकत्रित प्रदर्शन डेटा के आधार पर एक व्यापक प्रदर्शन विश्लेषण है।डॉटट्रेस और एएनटीएस जैसे आधुनिक प्रदर्शन प्रोफाइलर्स इसे प्रक्रिया से जोड़कर या एप्लिकेशन चलाकर कर सकते हैं, लेकिन अगर वे एफ # इंटरएक्टिव को भेजे गए कोड को प्रोफाइल कर सकते हैं तो यह बहुत ही कुशल होगा। तो सवाल यह था कि क्या यह हासिल किया जा सकता है। –

+0

मुझे # टाइम कमांड के बारे में पता नहीं था! –

4

आप इसे प्राप्त करने के लिए प्रोफाइलर प्रोग्रामेटिक एपीआई का उपयोग करने का प्रयास कर सकते हैं। मैं इस की कोशिश की है नहीं, लेकिन यहाँ चींटियों प्रोफाइलर के लिए निर्देश दिए गए हैं: http://help.red-gate.com/help/ANTSProfiler3/0/en/Topics/AP_UsingTheAPI.html

मुझे लगता है कि निम्नलिखित सफल होने दे सकता है:

  1. प्रारंभ चींटियों प्रोफाइलर और fsi.exe को
  2. r "Redgate देते हैं। Profiler.Api.dll "FSI

  3. छिड़ककर में कोड आप RedGate.Profiler.Api.Reset()/RedGate.Profiler.Api.TakeSnapshot() के साथ प्रोफ़ाइल करना चाहते

डॉटट्रेस में (एडी?) समान एपीआई (CPUProfiler.Start() /। StopAndTakeSnapshot()) है, लेकिन मुझे नवीनतम संस्करणों के संदर्भ नहीं मिल सका।

+0

यह एक दिलचस्प विकल्प है! मुझे बताने के लिए धन्यवाद। मुझे इसे आज़माना है। –

1

लेकिन क्या यह सबसे अच्छा है कि हम अभी F # के साथ कर सकते हैं?

AFAIK, हाँ। एफ # या किसी तीसरे पक्ष के उत्पाद के अगले संस्करण में एक सुविधा के लिए यह एक अच्छा विचार है!

संबंधित मुद्दे