मेरे कार्यक्रम में 200k फ़ाइलों की एक सूची है। मुझे डेटाबेस में प्रत्येक को आयात करना होगा। मुझे काफी समय लगता है इसलिए मैंने आयात प्रक्रिया को तेज करने के साधन के रूप में मल्टीथ्रेड के बारे में शोध करना शुरू कर दिया। मैं अंत में एक कार्यान्वयन के लिए मिला लेकिन मुझे यकीन नहीं है कि यह वास्तव में काम कर रहा है।मैं कैसे जांचूं कि मेरा मल्टीथ्रेड कोड वास्तव में एकाधिक धागे पर चल रहा है?
int threadCount = 0;
for (int i = 0; i < this.Total; i++)
{
Finished = new ManualResetEvent(false);
threadCount = this.ThreadCount;
Interlocked.Increment(ref threadCount);
FileHandler fh = new FileHandler(finished, sorted[i], this.PicturesFeatures, this.Outcome, this.SiteIds, this.LastId, this.Order, this.ThreadCount);
Console.Write(i + " ");
ThreadPool.QueueUserWorkItem(new WaitCallback(HandleFile), fh);
Console.Write(i + " ");
Finished.WaitOne();
}
और HandleFile() के रूप में चला जाता है:
private void HandleFile(object s)
{
try
{
//code
}
finally
{
if (Interlocked.Decrement(ref threadCount) == 0)
{
Finished.Set();
}
}
}
मैं उन Console.Write डाल दिया
मेरी सी # कोड के लिए एक नमूना के रूप में Workaround for the WaitHandle.WaitAll 64 handle limit? इस्तेमाल करने के बाद मैं के साथ आया गया है यह सोचकर कि यदि कोई प्रक्रिया अधिक है तो यह किसी अन्य ("0 0 1 2 2 1 3 3 ...") के बाद खत्म हो जाएगी, लेकिन यह हमेशा क्रम में है ("0 0 1 1 2 2 3 3 4 4 ... ")
मेरे पास एक टिप्पणी है: क्या आप सुनिश्चित हैं कि आपका कोड फ़ाइल I/O और डेटाबेस संचालन करने के बजाय समय कंप्यूटिंग सामग्री खर्च करता है? अन्यथा, इस तथ्य से अवगत रहें कि समानांतर में चीजें करने से आपके कोड को बहुत तेज़ नहीं किया जा सकता है (यानी, समानांतर में फ़ाइलों को पढ़ने के लिए तेज़ नहीं है कि उन्हें एक-एक करके पढ़ने के लिए; सिवाय इसके कि फ़ाइलों को अलग-अलग हार्ड पर संग्रहीत किया जाता है डिस्क)। –
हां, लेकिन डेटाबेस के बारे में क्या? प्रत्येक थ्रेड डेटाबेस के साथ एक अलग कनेक्शन खोलता है, इसलिए यदि मैं समांतरता का उपयोग करता हूं तो इसे तेज करना चाहिए। –
इतना यकीन नहीं है। परीक्षण करें और देखें कि क्या होता है। सभी मामलों में, यदि बाधा डिस्क I/O संचालन (स्थानीय रूप से या डेटाबेस स्तर पर) है, समानांतरता को लागू करने से चीजों को धीमा कर दिया जाएगा। –