これまで経験したことがある人はいますか?IPublishedContentをDtosとパフォーマンスに変換する
私はこのプロジェクトでModelsBuilderを使用していないと言って始めます。私はそれであまりにも多くの問題を抱えていたので、そのルートを放棄した。
私は基本的に値をマップするコンバータクラスを使用して、IPublishedContent項目をDtosに変換しています。私が見つけている問題は、コード実行で大規模な減速を引き起こしていることです。特に、単純なIPublishedContentコレクションを取得することと比較しています。
例を挙げると、私には「ジョブ」ドキュメントタイプがあります。仕事は労働者に割り当てられます。
public IEnumerable<IPublishedContent> GetJobsForWorker(int workerId)
{
var jobs = Umbraco.TypedContent(1234);
return jobs.Descendants("job").Where(j => j.GetPropertyValue<int>("assignedWorker") == workerId).ToList();
}
この関数は、私が期待するように、超高速返しIPublishContentのコレクションを返します:私のサービスの一つで、私は労働者に割り当てられたすべてのジョブのコレクションを取得する必要があります。
私は試してみて、私の仕事のDTOクラスに結果を変換する場合は、それが0秒を取ってから、周りの7に行く...それはちょうど〜20かそこらの記録から〜7のコレクションを返します:
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();
}
は今、私はこのコンバータ内の任意の複雑な処理をしていないよ、それだけのような値をマッピングしています:
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;
}
}
私はベストプラクティスがここにあるものは本当にわからないんだけど?この減速の原因となっているものがありますか? ModelsBuilderを使用していたので、私は尋ねます。 umbracoフィールドをプロパティにマップしますが、同じ遅延がどこにもありません。
最終的に私はIPublishedContentを使うことができますが、それは乱雑なコードになります。理解するのがはるかに難しいです。
誰もがこの前の状況にあったのか、どうやってそれを処理したのだろうかと思います。
おかげ
あなたの選択の前にToListを置くとどうなりますか? ToList()。(...)。ToList()を選択します。 – Evk
違いはありません。実際に何か小さなものを長くしているように思えばプラスの違いがありますか? – alimac83
ModelsBuilderを使用しない場合は、代わりにDittoをご覧ください:https://github.com/leekelleher/umbraco-ditto –