Le moyen le plus efficace pour supprimer plusieurs éléments à partir d'un IList<T>

Quel est le moyen le plus efficace pour supprimer plusieurs éléments à partir d'un IList<T> objet. Supposons que j'ai un IEnumerable<T> de tous les articles que je veux supprimer, dans le même ordre d'occurrence dans la liste d'origine.

Le seul moyen que j'ai à l'esprit est:

IList<T> items;
IEnumerable<T> itemsToDelete;
...

foreach (var x in itemsToDelete)
{
    items.Remove(x);
}

Mais je suppose que ce n'est pas efficace, parce qu'il doit aller sur la liste depuis le début à chaque fois que la méthode Remove est appelé.

Avez-vous profilé votre code? combien d'amélioration de la performance avez-vous besoin?
Comme John Skeet dit: Downvoter, des commentaires à ce sujet?
Parce que je travaille avec beaucoup de listes, et je vais avoir à faire à de nombreuses reprises.
L'ordinateur peut généralement faire des choses "de nombreuses fois" très rapidement. Êtes-vous sûr qu'il y est encore un problème de performance?
Est items dans l'ordre? Est itemsToDelete dans l'ordre? Avez-vous pensé si vous pouvez utiliser une ISet rapide exclusions? Avez-vous comparé la création d'une nouvelle liste au lieu de modifier un en place avec var set = new HashSet<T>(itemsToDelete); var newList = items.Where(i => !set.Contains(i)).ToList();? Avez-vous comparé à tous?

OriginalL'auteur Guillermo Gutiérrez | 2013-08-02