Extracting values from dictionaries where the keys match I have two Dictionaries with around 65,000 KeyValuePairs each. I used foreach and if-else statements to compare them and get values, but it goes very slow. How could I optimize my code and gain more speed?

private void bgwCompare_DoWork(object sender, DoWorkEventArgs e)
{
    var i = 0;

    foreach (KeyValuePair&lt;string, string&gt; line1 in FirstDictionary)
    {
        foreach (KeyValuePair&lt;string, string&gt; line2 in SecondDictionary)
        {
            if (line1.Key == line2.Key)
            {
                ResultDictionary.TryAdd(line1.Value, line2.Value);

                ListViewItem item = new ListViewItem(line1.Value);
                item.SubItems.Add(line2.Value);

                ResultList.Items.Add(item);
            }

            i++;
            bgwCompare.ReportProgress(i * 100 / (FirstDictionary.Count() * SecondDictionary.Count()));
        }
    }
}
If I'm understanding it correctly, you're populating a ConcurrentDictionary from the values of two other ConcurrentDictionaries, where the keys are equal. 

Try this, it's vastly faster than your loop in my tests.

var matches = FirstDictionary.Keys.Intersect(SecondDictionary.Keys);
foreach (var m in matches)
    ResultDictionary.TryAdd(FirstDictionary[m], SecondDictionary[m]);