0

foreach ループを含む次のコードを合理化し、反復を最小限に抑えたり、LINQ とコレクションが反復ごとに作成されるため、パフォーマンスを向上させたいと考えています。

foreach (Contact contact in Contacts) // phone contacts, around 500-1000
{
    IEnumerable<ContactEmailAddress> emails = contact.EmailAddresses; // each has multiple emails

    foreach (Friend parseUser in parseUsers) // could be many thousands
    {
        if (emails.Where(e => e.EmailAddress == parseUser.Email).ToList().Count > 0)
        {                        
            parseUser.AddContact(contact); // function call

            verifiedUsers.Add(parseUser); // add to my new aggregated list
        }
    }
}

ありがとう。

4

2 に答える 2

3

emailsの各アイテムのコレクションで線形検索を行うのではなく、次のparseUsersようなより効率的に検索できるコレクションを使用できますHashSet

foreach (Contact contact in Contacts) // phone contacts, around 500-1000
{
    HashSet<string> emails = new HashSet<string>(
        contact.EmailAddresses.Select(e => e.EmailAddress));

    foreach (Friend parseUser in parseUsers) // could be many thousands
    {
        if(emails.Contains(parseUser.Email))
        {
            parseUser.AddContact(contact); // function call

            verifiedUsers.Add(parseUser); // add to my new aggregated list
        }
    }
}
于 2013-04-25T16:21:23.870 に答える