की तुलना में मैं सी # की गति के बारे में चिंतित था जब यह भारी गणना से संबंधित है, जब आपको कच्ची सीपीयू पावर का उपयोग करने की आवश्यकता होती है।सी ++ और सी # गति
मैंने हमेशा सोचा कि गणना के समय सी ++ सी # से बहुत तेज है। तो मैंने कुछ त्वरित परीक्षण किए। पहला परीक्षण प्राइम संख्या < एक पूर्णांक एन की गणना करता है, दूसरा परीक्षण कुछ पैंडिजिटल संख्याओं की गणना करता है। दूसरे टेस्ट के लिए विचार यहाँ से आता है: Pandigital Numbers
सी # प्रधानमंत्री गणना:
using System;
using System.Diagnostics;
class Program
{
static int primes(int n)
{
uint i, j;
int countprimes = 0;
for (i = 1; i <= n; i++)
{
bool isprime = true;
for (j = 2; j <= Math.Sqrt(i); j++)
if ((i % j) == 0)
{
isprime = false;
break;
}
if (isprime) countprimes++;
}
return countprimes;
}
static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
Stopwatch sw = new Stopwatch();
sw.Start();
int res = primes(n);
sw.Stop();
Console.WriteLine("I found {0} prime numbers between 0 and {1} in {2} msecs.", res, n, sw.ElapsedMilliseconds);
Console.ReadKey();
}
}
सी ++ संस्करण:
#include <iostream>
#include <ctime>
#include <cmath>
int primes(unsigned long n) {
unsigned long i, j;
int countprimes = 0;
for(i = 1; i <= n; i++) {
int isprime = 1;
for(j = 2; j < sqrt((float)i); j++)
if(!(i%j)) {
isprime = 0;
break;
}
countprimes+= isprime;
}
return countprimes;
}
int main() {
int n, res;
cin>>n;
unsigned int start = clock();
res = primes(n);
int tprime = clock() - start;
cout<<"\nI found "<<res<<" prime numbers between 1 and "<<n<<" in "<<tprime<<" msecs.";
return 0;
}
जब मैं अभाज्य संख्या < 100,000 से खोजने की कोशिश कर परीक्षण भाग गया, सी # संस्करण 0.614 सेकंड में 0.40 9 सेकेंड और सी ++ संस्करण में समाप्त हुआ। जब मैंने उन्हें 1,000,000 सी # के लिए 6.039 सेकेंड में समाप्त किया और सी ++ लगभग 12.987 सेकेंड में चलाया। सी # में
Pandigital परीक्षण: C++
using System;
using System.Diagnostics;
class Program
{
static bool IsPandigital(int n)
{
int digits = 0; int count = 0; int tmp;
for (; n > 0; n /= 10, ++count)
{
if ((tmp = digits) == (digits |= 1 << (n - ((n/10) * 10) - 1)))
return false;
}
return digits == (1 << count) - 1;
}
static void Main()
{
int pans = 0;
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 1; i <= 123456789; i++)
{
if (IsPandigital(i))
{
pans++;
}
}
sw.Stop();
Console.WriteLine("{0}pcs, {1}ms", pans, sw.ElapsedMilliseconds);
Console.ReadKey();
}
}
Pandigital परीक्षण:
#include <iostream>
#include <ctime>
using namespace std;
int IsPandigital(int n)
{
int digits = 0; int count = 0; int tmp;
for (; n > 0; n /= 10, ++count)
{
if ((tmp = digits) == (digits |= 1 << (n - ((n/10) * 10) - 1)))
return 0;
}
return digits == (1 << count) - 1;
}
int main() {
int pans = 0;
unsigned int start = clock();
for (int i = 1; i <= 123456789; i++)
{
if (IsPandigital(i))
{
pans++;
}
}
int ptime = clock() - start;
cout<<"\nPans:"<<pans<<" time:"<<ptime;
return 0;
}
सी # संस्करण सी ++ 36.298 सेकंड में 29.906 सेकंड में चलाता है और।
मैंने किसी भी कंपाइलर स्विच को स्पर्श नहीं किया और दोनों सी # और सी ++ प्रोग्राम डीबग विकल्पों के साथ संकलित किए गए। मैंने परीक्षण चलाने का प्रयास करने से पहले मुझे चिंता थी कि सी # सी ++ के पीछे अच्छी तरह से पीछे हट जाएगा, लेकिन अब ऐसा लगता है कि सी # पक्ष में एक बहुत बड़ी गति अंतर है।
क्या कोई इसे समझा सकता है? सी # जलाया गया है और सी ++ मूल संकलित है इसलिए यह सामान्य है कि सी ++ सी # संस्करण से तेज होगा।
उत्तर के लिए धन्यवाद!
मैंने रिलीज कॉन्फ़िगरेशन के लिए सभी परीक्षणों को रेडिड किया है।
पहला परीक्षण (रूढ़ अंक)
सी # (संख्या < 100,0000): 0.189 सेकंड सी ++ (संख्या < 100,0000): 0.036 सेकंड
सी # (nummbers < 1,000,000): 5.300 सेकंड सी ++ (nummbers < 1,000,000): 1.166 सेकंड
दूसरे टेस्ट (Pandigital संख्या):
सी #: 21। 224 सेकंड सी ++: 4.104 सेकंड
तो, सबकुछ बदल गया है, अब सी ++ बहुत तेज है। मेरी गलती यह है कि मैंने डीबग कॉन्फ़िगरेशन के लिए परीक्षण चलाया है। क्या मैं कुछ गति सुधार देख सकता हूं यदि मैं सी # निष्पादन योग्यों को ngen के माध्यम से चलाता हूं?
कारण सी # और सी ++ की तुलना करने का कारण है क्योंकि मुझे दोनों की कुछ मूल बातें पता हैं और मैं जीयूआई से निपटने वाला एपीआई सीखना चाहता हूं।मैं सोच रहा था कि डब्ल्यूपीएफ अच्छा है इसलिए दिया गया है कि मैं डेस्कटॉप को लक्षित कर रहा हूं, मैं देखना चाहता था कि सी # विभिन्न गणनाओं (फ़ाइल संग्रहकर्ता, क्रिप्टोग्राफी, कोडेक्स इत्यादि) की गणना करने के लिए सीपीयू पावर पावर का उपयोग करने के लिए पर्याप्त गति और प्रदर्शन प्रदान कर सकता है या नहीं। । लेकिन ऐसा लगता है कि जब दुख की बात आती है तो दुखद सी # सी ++ के साथ गति नहीं रख सकता है।
तो, मैं मैं नए करेंगे संभालने हूँ जाएगा हमेशा के लिए इस सवाल का Tough question on WPF, Win32, MFC साथ अटक सकता है, और मैं एक उपयुक्त एपीआई पाते हैं।
"क्या कोई इसे समझा सकता है? सी # जलाया गया है और सी ++ मूल संकलित है इसलिए यह सामान्य है कि सी ++ सी # संस्करण से तेज होगा।" <- डीबग मोड के तहत नहीं। –
"... सी ++ प्रोग्राम डीबग विकल्पों के साथ संकलित किए गए थे।" तो फिर हम प्रदर्शन के बारे में चिंता क्यों कर रहे हैं? – GManNickG
'= 2; जे <(i^(1/2)); जे ++) 'यह कोड गलत है। आप थोड़ा सा कर रहे हैं - या, एक एक्सपोनिएशन नहीं। –