हाय लोग इस सवाल का अजीब लग सकता है, लेकिन मैं अपने सी # आवेदन के लिए Haptek लोग पोटीन प्लेयर का उपयोग कर रहा हूँ और मैंने देखा है लोगों को मंचों में कहते हैं कि यह एक मल्टीकोर प्रोसेसर के साथ अच्छी तरह से काम नहीं करता है। मेरा एप्लिकेशन मेरे कोर 2 डुओ लैपटॉप पर अच्छा प्रदर्शन करता है लेकिन जब मैं इसे क्वाड कोर डेस्कटॉप पर चलाने का प्रयास करता हूं तो यह बहुत कम होता है। मैं खुद के लिए इसकी जांच करने की सोच रहा था और उस स्थिति में, मुझे अपने आवेदन को एक कोर पर चलाने के लिए मजबूर करना होगा। क्या यह सी # में संभव है? धन्यवाद!फोर्स सी # आवेदन एक मल्टीकोर प्रोसेसर के साथ एक पीसी में एक सिंगल कोर का उपयोग करने के
उत्तर
जहां एक Process
चर proc
प्रक्रिया के बारे में आप (चल प्रक्रिया के लिए Process.GetCurrentProcess()
परवाह रखती है, किसी अन्य प्रक्रिया फिर से GetProcesses()
या GetProcessesByName()
आदि यह प्राप्त:।
foreach(ProcessThread pt in proc.Threads)
{
pt.IdealProcessor = 0;
pt.ProcessorAffinity = (IntPtr)1;
}
IdealProcessor एक शून्य आधारित पहचान है प्रोसेसरएफ़िनिटी एक बिटमास्क है, इसलिए 1 कोर शून्य की अनुमति देता है, 2 कोर एक को अनुमति देता है, 3 कोर कोर की अनुमति देता है और एक, 4 कोर दो की अनुमति देता है, और इसी तरह।
मैं इस का परीक्षण करेगा। संभावनाएं बहुत मजबूत हैं कि यह वास्तव में आपके प्रदर्शन को नुकसान पहुंचाएगी, विभिन्न कोरों का उपयोग करने की क्षमता को कम करने में, जो आम तौर पर आम तौर पर एक लाभ होता है।
धन्यवाद जॉन! मैंने कल भी ऐसा करने की कोशिश की और यह मेरे आवेदन के लिए काम किया। आप सही हैं कि यह प्रदर्शन में बाधा डालता है लेकिन यह एकमात्र तरीका है जिससे मैं लोगों को काम करने के लिए मजबूर कर सकता हूं :(असल में कार्यक्रम दोहरी कोर प्रोसेसर के साथ काम करता है, लेकिन जब से मैंने इसे क्वाड कोर पर चलाया तो यह वास्तव में धीमा हो गया। अब मुझे यह मिला 2 से नीचे, ऐसा लगता है कि यह काफी अच्छा काम कर रहा है। – Paul
@akim उस संपादन को कोई समझ नहीं आता है, तब यह वर्तमान प्रक्रिया को संदर्भित करेगा जो प्रश्न के विपरीत है। –
@ जोनहन्ना, वर्तमान स्निपेट संकलित नहीं होगा। और यह एकल प्रक्रिया पर चलाने के लिए केवल पहला धागा बनाता है, लेकिन सभी धागे नहीं। – Akim
सी # में वास्तव में संभव नहीं है। खैर, मुझे कोई रास्ता नहीं पता है। आपको इंटरऑप चाहिए, इसके साथ यह काम करता है।
आप एक से अधिक थ्रेड का उपयोग कर रहे हैं? यदि नहीं - एचएम - क्षमा करें - आप बहुत कुछ नहीं कर सकते हैं। मानक यूआई अनुप्रयोग वैसे भी एकाधिक कोर का उपयोग नहीं कर रहे हैं।
असल में, अनुप्रयोगों वैसे भी धागे का उपयोग नहीं (कार्य आइटम धागे का उपयोग करें) स्वाभाविक कर रहे हैं सिंगल कोर।
मेरा एप्लिकेशन एकाधिक धागे का उपयोग नहीं करता है। हैप्टेक पीपुल्स पुट्टी प्लेयर ने सिर्फ एक डीएलएल प्रदान किया है, इसलिए मुझे नहीं पता कि यह वास्तव में अंदर क्या करता है। मुझे नहीं पता कि उनके पास एकाधिक धागे हैं या नहीं। मुझे लगता है कि समस्या झूठ के बाद से मैं अपने कोड :( – Paul
मैं उस पर सहमत होगा करने के लिए पहुँच नहीं है। उनमें से होस्टिंग। आप एसटीए थ्रेडिंग की घोषणा कर रहे हैं के रूप में वी.एस. टेम्पलेट्स? – TomTom
हाँ करते हैं कि सही – Paul
तो आवेदन एकल पिरोया है, यह नहीं लाभ कई कोर के ले जाएगा। हालांकि, यह संभव है कि कर्नेल कोर के बीच धागे को टक्कर दे सके। मुझे संदेह है कि यह आपकी प्रदर्शन समस्याओं का कारण है।
यदि आप धागे को एक कोर पर बांधना चाहते हैं (सुनिश्चित नहीं है कि यह गारंटी दी जा सकती है), तो आप System.Diagnostics.ProcessThread.ProcessorAffinity
संपत्ति को देखना चाहेंगे, हालांकि मैंने इसे कभी भी उपयोग नहीं किया है।
[कैसे Windows XP के लिए बैच फ़ाइल से प्रोसेसर आत्मीयता स्थापित करने के लिए के संभावित डुप्लिकेट? ] (Http://stackoverflow.com/questions/827754/how-to-set-processor-affinity-from-batch-file-for-windows-xp) –
हम्म हालांकि यह ठीक उसी समस्या नहीं है, लेकिन मैं इस्तेमाल कर सकते हैं एक समाधान के रूप में। मुझे शायद इसे सीधे चलाने के बजाए मेरे आवेदन के लिए बैच फ़ाइल बनाना होगा। मैं यह देखने की कोशिश करूंगा कि यह कल काम करता है या नहीं। लिंक हंस के लिए धन्यवाद। – Paul