J'ai une liste d'articles manquants comme celui-ci et j'essaie d'effectuer une opération en vrac contre ma table de base de données en supprimant de petits morceaux d'éléments de la liste existante (2500 articles à la fois):
castedItems.RemoveRange(subList);
3 Réponses :
var castedItems = missingItems.ToList(); var offset = 0; var limit = 0; while (castedItems.Any()) { var subList = castedItems.Take(2500).ToList(); limit = limit + 2500; DBRetry.Do(() => EFBatchOperation.For(ctx, ctx.SearchedUserItems).InsertAll(subList), TimeSpan.FromSeconds(2)); castedItems.RemoveRange(offset, limit); offset = offset + limit? } Try this, offset limit updating might need to updated. Didn't check the working
Je crois que vous pouvez simplement faire:
castedItems.RemoveRange(0,2500);
En supposant que vous ayez un bon compaire que vous pouvez faire, sauf.
var castedItems = castedItems.Skip(2500);
Avez-vous essayé de passer le décalage et de la limite? Comme 0 et 2500 première fois?
quelque chose comme ça
casteditems.except (subliste) .tolist (); code>
@Milindanantwar veulent-tu dire comme: casteditems = casteditems.except (subliste) .tolist (); ?
@Akbarbadhusha Pouvez-vous me montrer un exemple?
@ User987: oui. Vous pouvez faire ce
casteditems = casteditems.except (subliste) .tolist (); code>
Pourquoi ne pas simplement faire: casteditems.removerange (0.2500);
@apomene ou l'exemple comme Milind Anantwar montré, lequel serait mieux?
@ User987: celui que Apomene a partagé :). Comme ma solution iTère dans la liste complète, puis supprime les éléments.
Si vous souhaitez supprimer des articles de l'avant de la collection, vous devez vraiment utiliser une file d'attente, pas une liste. Ces opérations sont certaines des opérations les plus inefficaces que vous puissiez effectuer sur une liste. Une file d'attente est spécialement conçue pour faire exactement ce type de chose efficacement. Cela suppose que vous devez mettre les articles dans une nouvelle collection du tout i>, plutôt que simplement itération
manquantItems code> et ne mettant jamais les éléments dans une question matérialisée pour commencer (ce qui serait idéal si réalisable).
@apomene pouvez-vous publier votre solution finale car celle-ci semble être la plus efficace? :)