2017-04-08 2 views
0

Ich frage mich, ob jemand anderes dies schon einmal erlebt hat?Konvertieren von IPublishedContent in Dtos und Leistung

Ich sollte damit beginnen zu sagen, dass ich nicht ModelBuilder für dieses Projekt verwende. Ich hatte zu viele Probleme damit, dass ich diese Route aufgegeben habe.

Ich bin jedoch konvertieren IPirwishedContent Elemente in Dtos innerhalb meiner App, mit einer Konverter-Klasse, die im Grunde die Werte zugeordnet. Das Problem, das ich finde, ist, dass es zu einer massiven Verlangsamung meiner Codeausführung führt, insbesondere im Vergleich zur bloßen Sammlung von unveröffentlichten IP-Veröffentlichungen.

Um Ihnen ein Beispiel zu geben, habe ich einen Dokumententyp 'Job'. Jobs können Mitarbeitern zugewiesen werden. In einem meinem Dienst brauche ich eine Sammlung aller Arbeitsplätze, die einen Arbeitnehmer zugewiesen zu bekommen:

public IEnumerable<IPublishedContent> GetJobsForWorker(int workerId) 
{ 
    var jobs = Umbraco.TypedContent(1234); 

    return jobs.Descendants("job").Where(j => j.GetPropertyValue<int>("assignedWorker") == workerId).ToList(); 
} 

Diese Funktion eine Sammlung kehrt von IPublishContent, die blitzschnell zurückkehrt, wie ich erwarten würde.

Allerdings, wenn ich die Ergebnisse meiner Arbeit Dto Klasse versuchen und konvertieren, geht es daran, 0 Sekunden auf etwa 7 .. und das ist nur eine Sammlung von ~ 7 von ~ 20 oder so Aufzeichnungen Rückkehr:

public IEnumerable<Job> GetJobsCompletedByWorker(int workerId) 
{ 
    var jobs = Umbraco.TypedContent(1234); 

    return jobs.Descendants("job").Where(j => j.GetPropertyValue<int>("assignedWorker") == workerId).Select(node => _jobConverter.ConvertToModel(_umbracoHelper, node)).ToList(); 
} 

nun keine komplexe Verarbeitung in diesem Konverter tut ich, es ist die Abbildung nur die Werte als solche:

public class JobConverter 
{ 
    public Job ConvertToModel(UmbracoHelper umbracoHelper, IPublishedContent node) 
    { 
     if (node != null) 
     { 
      var job = new Job 
      { 
       Id = node.Id, 
       Property1 = node.GetPropertyValue<string>("property1"), 
       Property2 = node.GetPropertyValue<string>("property2") 
       ... more properties 
      }; 

      return job; 
     } 

     return null; 
    } 
} 

ich bin nicht wirklich sicher, was am beste Praxis hier ist? Gibt es etwas, das mir fehlt, das diese Verlangsamung verursacht? Ich frage nur, weil ich ModelBuilder vorher benutzt habe, was im Wesentlichen das selbe macht, dh. Umbraco-Felder zu Grundstücken umwandeln, und doch gibt es nicht annähernd die gleiche Verzögerung.

Letztendlich konnte ich nur IPublishedContent verwenden, aber es macht für chaotischen Code und es ist viel schwieriger zu verstehen.

Ich frage mich nur, ob jemand in dieser Situation war und wie sie damit umgegangen sind?

Dank

+0

Was passiert, wenn Sie ToList vor Ihre Auswahl stellen? Damit haben Sie Where(). ToList(). Wählen Sie (...). ToList(). – Evk

+0

machte keinen Unterschied .. in der Tat, wenn es etwas zu dauern schien, plus ich bin mir nicht sicher, welchen Unterschied es erwarten würde zu machen? – alimac83

+0

Wenn Sie ModelBuilder nicht verwenden möchten, werfen Sie stattdessen einen Blick auf Ditto: https://github.com/leekelleher/umbraco-dito –

Antwort

0

Es stellt sich heraus, dass ich eine Hilfsmethode tatsächlich hatte laufen auf einem meiner Eigenschaften, die Mitgliederdaten wurde das Abfragen, die eine Datenbank callte .. damit die Verlangsamung!