सरल सत्य यह है कि एनएसएलओजी सिर्फ सादा धीमा है।
लेकिन क्यों? उस प्रश्न का उत्तर देने के लिए, पता लगाएं कि एनएसएलओजी क्या करता है, और फिर यह कैसे करता है।
एनएसएलओजी वास्तव में क्या करता है?
यह लॉगिंग (ASL) सुविधा एप्पल प्रणाली को संदेश लॉग इन करें लिखते हैं:
NSLog 2 काम करता है। यह लॉग संदेशों को Console.app में दिखाने की अनुमति देता है। यह यह देखने के लिए भी जांच करता है कि एप्लिकेशन की stderr स्ट्रीम टर्मिनल पर जा रही है (जैसे कि जब एक्सकोड के माध्यम से एप्लिकेशन चलाया जा रहा हो)। यदि ऐसा है तो यह stderr को लॉग संदेश लिखता है (ताकि यह एक्सकोड कंसोल में दिखाई दे)।
एसटीडीईआरआर को लिखना मुश्किल नहीं है। यह fprintf और stderr फ़ाइल descriptor संदर्भ के साथ पूरा किया जा सकता है। लेकिन एएसएल के बारे में क्या?
सबसे अच्छा प्रलेखन मैं एएसएल के बारे में मिल गया है पीटर Hosey से एक 10 भाग ब्लॉग पोस्ट है: link
बहुत ज्यादा विस्तार, मुख्य आकर्षण में जा रहा है (क्योंकि यह प्रदर्शन से संबंधित है) के बिना यह है:
एएसएल सुविधा के लिए एक लॉग संदेश भेजने के लिए, आप मूल रूप से एएसएल डिमन के लिए क्लाइंट कनेक्शन खोलते हैं और संदेश भेजते हैं। लेकिन - प्रत्येक धागे को एक अलग ग्राहक कनेक्शन का उपयोग करना चाहिए। इसलिए, थ्रेड सुरक्षित होने के लिए, हर बार एनएसएलओजी कहलाता है, यह एक नया एएसएल क्लाइंट कनेक्शन खोलता है, संदेश भेजता है, और फिर कनेक्शन बंद कर देता है।
संसाधन here & here पाया जा सकता है।
मुझे पता है कि यह प्रश्न अब बहुत पुराना है, लेकिन, यदि आप अभी भी कर सकते हैं, तो मैं मार्क चारबोनू के उत्तर को स्वीकार्य मानता हूं। मैंने अपने जवाब को इंगित करने के लिए संशोधित किया है, लेकिन उसका जवाब सही है। उन्होंने कहा कि कठोर तरीके से पता चला है कि –
एनएसएलओजी() लगातार लूप के अंदर पूरी तरह से आपके प्रदर्शन को मार देगा। – willc2