2016-04-04 8 views
1

Ich habe Artikel Importeur, der alle Artikelunterpositionen löscht und neue Unterpunkte erstellt. Kürzlich habe ich es in Eimer umgestellt und jetzt habe ich ein Problem mit dem Löschen. I Löschen von Elementen verwenden:Sitecore - Lösche Bucket Unterpunkte

myItem.DeleteChildren(); 

Ohne Eimer dauerte es etwa 20 Minuten. Jetzt dauert es etwa 1h für 5k Artikel. Muss ich den Bucket-Artikel vor dem Löschen wiederherstellen und dann erneut synchronisieren? Was ist der schnellste Weg zum Löschen buckelbarer Artikel?

Antwort

1

Sie könnten einen Schritt weiter gehen. Ich konnte 30k in Minuten importieren, indem ich alle drei deaktiviert habe.

using (new Sitecore.SecurityModel.SecurityDisabler()) 
{ 
    using (new Sitecore.Data.Events.EventDisabler()) 
    { 
     using (new ProxyDisabler()) 
     { 
      //delete code here 
     } 
    } 
} 
+0

Wenn ich Bucket Subitem hinzufügen, muss ich etwas anderes als myBucket.Add() -Methode wie üblich verwenden? Ich habe einige Artikel hinzugefügt und kann sie in Sitecore Content Editor finden – petros

+0

Fügen Sie einfach Elemente wie normal hinzu und sie werden in einen Bucket eingefügt. Wenn sie nicht automatisch in den Bucket gelangen, wird Ihre Vorlage in den Standardwerten nicht auf "Bucket" gesetzt. –

1

Wenn Sie viele Elemente im Bucket haben, werden Ereignisse für jedes Element ausgeführt, das gelöscht wird. Setzen Sie Ihren Löschcode in einen Event Disabler:

using (new EventDisabler()) 
{ 
    myItem.DeleteChildren(); 
} 

Das wird alle Ereignisse von feuern stoppen und sollte erheblich schneller sein. Als Vorbehalt - die Indizes werden dabei nicht sofort aktualisiert. Daher sollten Sie nach der Ausführung des Importers eine Indexaktualisierung in der Master-Datenbank ausführen.

Eine andere Option wäre, vorhandene Elemente im Import zu aktualisieren, anstatt zuerst alle Elemente zu löschen.

+0

Kann ich Index-Update programmgesteuert ausführen? – petros

2

Meine Vermutung ist, dass das Löschen jetzt länger dauert, da der Bucket beim Löschen Indizes aktualisiert. Sie können zwar beschleunigen, indem Sie Ereignisse um Ihren .DeleteChildren-Aufruf deaktivieren, diese Indizes müssen jedoch aktualisiert werden, damit Ihr Bucket ordnungsgemäß funktioniert.

So, um Ihre Frage zu beantworten, gibt es keine Möglichkeit, es zu beschleunigen, während die volle Funktionalität erhalten bleibt.

Wenn Sie dies in Aktion testen wollen, versuchen Sie Folgendes:

using(new EventDisabler()) myItem.DeleteChildren(); 

Es sollte die Löschung bringen beschleunigen, wo es vorher war, aber um den Preis eines Eimers, die nicht richtig funktionieren, bis Indizes erstellt wurden.

Ich würde Ihnen empfehlen, einen Integrationsansatz anzupassen, bei dem das vollständige Löschen und Neuaufbau Ihres Artikelspeichers nicht erforderlich ist.

+0

Kann ich Indexaktualisierung programmgesteuert ausführen? – petros

+0

Ja. Aber es sollte auch aufholen. Schließlich. Sei dir nur bewusst; Ab dem Zeitpunkt des Imports und der Aktualisierung des Indexes führt alles, was Sie über die Bucket-API abfragen, zu inkonsistenten/falschen Ergebnissen. Für den Index Wiederaufbau: http://stackoverflow.com/questions/31419638/sitecore-refresh-index –

0

Vielleicht (programmatisch) vor Aufruf von DeleteChildren() gelöst? Ich weiß nicht, wie lange das Ganze dauern wird, aber vielleicht schneller als es jetzt ist

Verwandte Themen