Example #1
0
        private static void ThreadDoWork(object threadStartParameter)
        {
            ThreadWorkBlock localWorkBlock = (ThreadWorkBlock)threadStartParameter;

            Dictionary <string, int> localWordCountDict = new Dictionary <string, int>();

            for (int i = localWorkBlock.StartingIndex; i < localWorkBlock.StartingIndex + localWorkBlock.Count; ++i)
            {
                string thisWord = wordList[i].ToUpper().Replace("-", String.Empty).Replace("'", String.Empty).Trim();
                bool   firstLocalOccurrenceOfWord = !localWordCountDict.ContainsKey(thisWord);
                if (firstLocalOccurrenceOfWord)
                {
                    localWordCountDict.Add(thisWord, 1);
                }
                else
                {
                    localWordCountDict[thisWord] = localWordCountDict[thisWord] + 1;
                }
            }
            lock (wordCountCalculatorSyncObj)
            {
                foreach (var kvp in localWordCountDict)
                {
                    bool firstGlobalOccurrenceOfWord = !wordCountDict.ContainsKey(kvp.Key);
                    if (firstGlobalOccurrenceOfWord)
                    {
                        wordCountDict.Add(kvp.Key, kvp.Value);
                    }
                    else
                    {
                        wordCountDict[kvp.Key] += kvp.Value;
                    }
                }
            }
        }
Example #2
0
        private static void ThreadDoWorkSectioned(object threadStartParameter)
        {
            ThreadWorkBlock localWorkBlock = (ThreadWorkBlock)threadStartParameter;

            Dictionary <string, int> localWordCountDict = new Dictionary <string, int>();
            int countPerSection = localWorkBlock.Count / NUM_SECTIONS_PER_THREAD;

            for (int section = 0; section < NUM_SECTIONS_PER_THREAD; ++section)
            {
                int startingIndex = localWorkBlock.StartingIndex + countPerSection * section;
                int count         = section < NUM_SECTIONS_PER_THREAD - 1 ? countPerSection : localWorkBlock.Count - countPerSection * (NUM_SECTIONS_PER_THREAD - 1);
                localWordCountDict.Clear();

                for (int i = startingIndex; i < startingIndex + count; ++i)
                {
                    string thisWord = wordList[i].ToUpper().Replace("-", String.Empty).Replace("'", String.Empty).Trim();
                    bool   firstLocalOccurrenceOfWord = !localWordCountDict.ContainsKey(thisWord);
                    if (firstLocalOccurrenceOfWord)
                    {
                        localWordCountDict.Add(thisWord, 1);
                    }
                    else
                    {
                        localWordCountDict[thisWord] = localWordCountDict[thisWord] + 1;
                    }
                }
                lock (wordCountCalculatorSyncObj)
                {
                    foreach (var kvp in localWordCountDict)
                    {
                        bool firstGlobalOccurrenceOfWord = !wordCountDict.ContainsKey(kvp.Key);
                        if (firstGlobalOccurrenceOfWord)
                        {
                            wordCountDict.Add(kvp.Key, kvp.Value);
                        }
                        else
                        {
                            wordCountDict[kvp.Key] += kvp.Value;
                        }
                    }
                }
            }
        }