delphi - converting program to Multithreading, taking advantage of multicore cpu -


मेरे पास एक प्रक्रिया के साथ एक साधारण प्रोग्राम है।

  प्रक्रिया TForm1.btnKeywrdTransClick (प्रेषक: TObject); Var i, ii: पूर्णांक; Ch_word, zword, uy_word: widestring; शुरू करें TntListBox1.items.LoadFromFile ('d: \ new folder \ chh.txt'); // चीनी TntListBox2.items.LoadFromFile ('डी: \ नया फ़ोल्डर \ uyy.txt'); // उइवर टेंट लिस्टबॉक्स 4। आईटम्स। लोडफ्रमफ़ाइल (एडिट 3.टेक्स्ट); // poi फाइलों की सूची I: = 0 से TntListBox4.items.Count- 1 को शुरू करें TntListBox3.items.LoadFromFile (TntListBox4.Items [i]); Zword: = tntlistbox3.Items.Text; // Poi के लिए ii: = 0 से TntListBox1.Items.count - 1 लूपज़ आरंभ करें; Ch_word: = tntlistbox1.Items [ii]; Uy_word: = '' + TntListBox2.items [ii] + ''; Zword: = चौड़े फास्ट रीप्ले (zword, ch_word, uy_word, [rfReplaceAll]); // तेज, और बड़े टेक्स्ट के लिए बेहतर; TntListBox3.Items.text: = zword; TntListBox3.items.SaveToFile (TntListBox4.Items [i]); समाप्त; समाप्त;  

अब मेरे नए कंप्यूटर में 4कोर्स हैं, इस कार्यक्रम को बहुप्रतीक्षित बनाने से इसे तेजी से चलाया जा सकता है (यदि मैं 4 थ्रेड, एक कोर प्रति धागा का उपयोग करता हूँ)? मल्टीथ्रेडिंग के साथ मेरे पास कोई अनुभव नहीं है, मुझे तुम्हारी मदद की आवश्यकता है धन्यवाद।

ps: यह लोपेज प्रक्रिया है

  प्रक्रिया लूप; Var संदेश: tmsg; पीके मेसेज शुरू करें (संदेश, 0, 0, 0, pm_Remove) क्या शुरू करो अगर संदेश। संदेश = wm_Quit तब हॉल्ट (संदेश.पाराम); TranslateMessage (संदेश); DispatchMessage (संदेश); समाप्त; समाप्त; उत्तर से  

अपडेट 1: , मैं करने वाला हूँ

1 - अधिक समय लेने वाला कोड ढूंढने के लिए एक प्रोफाइलर का उपयोग करें

2 - यदि संभव हो तो ग्यो संबंधी चीजों को खत्म करने का प्रयास करें

3 - धागे का उपयोग करें।

मैं वापस रिपोर्ट करूँगा। सभी का धन्यवाद।

सबसे पहले एल्गोरिथ्म को प्रभावी बनाते हैं क्योंकि यह वर्तमान अवतार में हो सकता है: < मजबूत> अपने डेटा को स्टोर करने के लिए TListBox का उपयोग बंद करो !!! (चिल्लाने के लिए खेद है) उन्हें TStringList के साथ बदलें और आपको एक बड़ा प्रदर्शन सुधार मिलेगा यह एक आवश्यक पहला कदम किसी भी तरह से है, क्योंकि आप जीयूआई ऑब्जेक्ट्स को एकाधिक थ्रेड्स से नहीं उपयोग कर सकते हैं (वास्तव में आप उन्हें केवल "मुख्य" थ्रेड से इस्तेमाल कर सकते हैं) जब आप TListBox को TStringList को बदल रहे हैं कृपया अपने चर अर्थपूर्ण नाम दें मुझे नहीं पता कि यहाँ के चारों ओर कितने लोग लिस्टबोक्स 4 में फ़ाइल नामों की एक सूची को संचय कर रहे हैं, लिस्टबॉक्स 3 में प्रत्येक फ़ाइल को लोड करते हुए सूचीबॉक्स 1 को "कीवर्ड लिस्ट" और "सूची सूची" के रूप में सूची 2 बॉक्स के रूप में "मूल्य सूची" के रूप में ... वास्तव में, यह एक बड़ी गलती है! यहां बताया गया है कि यह कैसे TStringList और उचित नामों के साथ दिखेगा:

  प्रक्रिया TForm1.btnKeywrdTransClick (प्रेषक: टूबैक्ट); Var i, ii: पूर्णांक; Ch_word, zword, uy_word: widestring; PoiFilesList: TStringList; // यह फाइलों की सूची है जो काम की जरूरत है PoiFile: TStringList; // यह मैं जिस फ़ाइल पर काम कर रहा हूं, वह है KeywordList, ValueList: TStringList; // मैं संबंधित मानों के साथ सभी खोजशब्दों को बदलूंगा PoiFilesList: = TStringList.Create; PoiFile: = TStringList.Create; कीवर्ड लिस्ट: = TStringList.Create; ValueList: = TStringList.Create; PoiFilesList.LoadFromFile (Edit3.text) की कोशिश करो; // poi फ़ाइलों की सूची KeywordList.LoadFromFile ('d: \ new folder \ chh.txt'); // चीनी वैलिलिस्ट। लोडफ़ॉर्मफाइल ('डी: \ नया फ़ोल्डर \ uyy.txt'); // Uyword I: = 0 से PoiFilesList.Count- 1 को PoiFile प्रारंभ करें। लोडफ़ॉर्मफाइल (पॉइफाइलसिल [i]); Zword: = PoiFile.Text; Ii के लिए Poi: = 0 KeywordList.count - 1 को प्रारंभ करें ch_word: = KeywordList [ii]; Uy_word: = '' + मान सूची [ii] + ''; Zword: = चौड़े फास्ट रीप्ले (zword, ch_word, uy_word, [rfReplaceAll]); समाप्त; PoiFile.text: = zword; PoiFile.SaveToFile (PoiFilesList [i]); समाप्त; अंत में पोइफिल्सलिस्ट। फ्री; PoiFile.Free; KeywordList.Free; ValueList.Free; समाप्त; समाप्त;  

यदि आप अब कोड को देख रहे हैं, तो यह स्पष्ट है कि यह क्या करता है, और यह स्पष्ट है कि कैसे बहु-धागा-यह। आपके पास फाइलों के नाम वाली एक टेक्स्ट फाइल है आप उन सभी फाइलों को खोलते हैं और संबंधित कीवर्ड के साथ सभी कीवर्ड को बदल देते हैं। फ़ाइल को डिस्क पर वापस सहेजें। यह आसान है! एक बार स्मृति के लिए खोजशब्द लिस्ट और वैलिलिस्टिक को लोड करें, फ़ाइलों की सूची को 4 छोटी सूचियों में विभाजित करें, प्रत्येक छोटी-छोटी फाइलों के साथ काम करने वाले प्रत्येक 4 धागे शुरू करें।

मैं पूरे बहु- कोड का लड़ी पिरोया प्रकार क्योंकि अगर मैं इसे खुद लिखूँगा तो आप समझ नहीं पाएंगे कि यह कैसे काम करता है। यदि आपको परेशानी हो तो उसे मौका दें और मदद मांगें।


Comments