के साथ काम करते समय सीपीयू और/या रैम उत्पादकता कल मैं एक परीक्षा समस्या को हल कर रहा था, जब कुछ बहुत दिलचस्प (कम से कम मेरे लिए) पाया गया। कार्यक्रम फैक्टोरियल (बहुत बड़े लोगों) के लिए है और परिणाम यह है कि संख्या के अंत में कितने शून्य हैं (कुछ मामलों में 2500
शून्य ..)। तो मैंने जो किया वह मैंने किया, लेकिन पाया कि 100 000
जैसे नंबर दर्ज करते समय परिणाम को आउटपुट करने के लिए वास्तव में 1;30 - 1;33min
लगता है। मैंने सोचा क्योंकि यह मेरे सीपीयू के कारण है (यह बहुत तेज़ नहीं है)। मैंने अपने कुछ दोस्तों को .exe को यह कोशिश करने के लिए भेजा है क्योंकि जब हम प्रदर्शन के बारे में बात कर रहे हैं तो उनके पास बहुत अच्छे पीसी हैं - बिल्कुल वही परिणाम (1;33min
)।बड़े पूर्णांक
मेरा प्रश्न यह है कि कार्य को हल करने का समय क्यों है। मुझे पता है कि मेरे कोर को लिखने के बेहतर तरीके हैं इसलिए इसमें नहीं लगेगा, लेकिन शुरुआती प्रोग्रामर के रूप में समझना मेरे लिए बहुत महत्वपूर्ण है।
static void Main()
{
int num = int.Parse(Console.ReadLine()),
zeroCounter = 0;
BigInteger fact = 1;
var startTime = DateTime.Now;
Console.WriteLine();
for (int i = 1; i <= num; i++)
{
fact *= i;
Console.Write("\r{0}", DateTime.Now - startTime);
}
BigInteger factTarget = fact;
while (factTarget % 10 == 0)
{
factTarget /= 10;
zeroCounter++;
Console.Write("\r{0}", DateTime.Now - startTime);
}
Console.WriteLine();
Console.WriteLine("Result is number with {0} zeros.", zeroCounter);
Console.WriteLine();
Console.WriteLine("Finished for: {0}", DateTime.Now - startTime);
Console.WriteLine();
Console.WriteLine("\nPres any key to exit...");
Console.ReadKey();
}
मैं बहुत माफी चाहता हूँ यह पूछने के लिए गलत जगह है, मैं मैं इससे पहले कि मैं इस पोस्ट के लिए क्या देख रहा था खोजने के लिए मेरे सबसे अच्छे किया है: तो यहाँ मेरी कोड है।
आपका कोड लूप के प्रत्येक पुनरावृत्ति पर कंसोल के लिए एक पंक्ति उत्सर्जित कर रहा है। गणना समय एक पुनरावृत्ति निष्पादित करने के लिए समय का एक छोटा सा अंश होगा क्योंकि एक लाइन आउटपुट करने के लिए आवश्यक सिस्टम कॉल तुलनात्मक रूप से बहुत धीमी होगी। I/O प्रक्रियाएं आमतौर पर प्रोसेसर की गति से बंधी नहीं होती हैं, लेकिन अन्य कारकों से इसलिए अधिकांश पीसी प्रोग्राम को एक ही समय में निष्पादित करेंगे। गणना गणना के पहले और बाद में आउटपुट के साथ प्रयोग फिर से प्रयास करें। –
अत्यधिक @Hobo Sapiens के रूप में लिखा है - इसके अतिरिक्त आप स्टॉपवॉच क्लास (https://msdn.microsoft.com/en-US/library/system.diagnostics.stopwatch%28v=vs.110%29.aspx) का उपयोग करना चाह सकते हैं। समय को मापने के लिए क्योंकि यह केवल आपके कोड को निष्पादित करने के लिए आवश्यक समय को मापता है। –
मैं 'स्टॉपवॉच' का उपयोग करने के लिए @ पियट्रिपियेटर की सिफारिश से सहमत हूं। उस ने कहा, 'स्टॉपवॉच' उपायों को अनिवार्य रूप से समय सीमा समाप्त हो गई है क्योंकि 'डेटटाइम.अब' रिकॉर्डिंग होगी। बड़ा अंतर यह है कि ए) 'स्टॉपवॉच' अधिक सटीक हो सकता है (पीसी के आधार पर), और बी) यह भिन्नता के अधीन नहीं है जो हो सकता है उदा। पीसी की घड़ी को रीसेट करके (जो कि अधिकांश पीसी पर स्वचालित रूप से और समय-समय पर होता है), या टाइमज़ोन में परिवर्तन ('UtcNow' के बजाय' Utc' का उपयोग करते समय)। इस परीक्षण के दौरान होने वाले किसी भी व्यक्ति की बाधा कम है, लेकिन यह अभी भी एक अच्छा सुझाव है। –