2012-01-31 1 views
2

У меня есть представление, что дисплей Вопрос, ответы, комментарии к ответам и вопрос.Render action perfomance

Для отображения всех данных я хочу использовать что-то вроде этого:

[HttpGet, ChildActionOnly] 
    public PartialViewResult RenderQuestion(int questionId, int page, int pageSize, string sort)//For question display 
    { 
     var question = questionsService.GetQuestion(questionId); 
     var author = userService.GetUser(question.AuthorId); 
     var commentIds = commentService.GetTopCommentIds(questionId, int.MaxValue, CommentType.Question); 
     var answerIds = answerService.GetAnswerIdsByQuestion(page, pageSize, questionId, sort); 
     var model = new QuestionModel{ Question = question, Author = author, CommentIds = commentIds, AnswerIds = answerIds} 
     return PartialView("_Question", model); 
    } 
    [HttpGet, ChildActionOnly] 
    public PartialViewResult RenderAnswer(int answerId) 
    { 
     var answer = answerService.GetAnswer(answerId); 
     var author = userService.GetUser(answer.AuthorId); 
     var commentIds = commentService.GetTopCommentIds(answerId, int.MaxValue, CommentType.Answer); 
     var model = new AnswerModel { Answer = answer, Author = author, CommentIds = commentIds}; 
     return PartialView("_Answer"); 
    } 

    [HttpGet, ChildActionOnly] 
    public PartialViewResult RenderComment(int commentId, CommentType commentType) 
    { 
     var comment = commentService.GetComment(commentId, commentType); 
     var author = userService.GetUser(comment.AuthorId); 
     var model = new CommentModel { Comment = comment, Author = author}; 
     return PartialView("_Comment"); 
    } 

И в моем частичном виде, например, для вопроса я буду итерацией в цикле Model.AnswerIds и называем @{ Html.RenderAction("RenderAnswer", new {answerId}) }; и Model.CommentIds и называем @{ Html.RenderAction("RenderComment", new {commentId}) };

Я хочу знать, это хороший способ разложения и, таким образом, плохо влияет на производительность, вызванную часто звонками @Html.RenderAction.

ответ

2

К сожалению, это приведет к плохой производительности. RenderAction не известен своей стремительной скоростью.

Вы также будете создавать экземпляр своего контроллера несколько раз (возможно, одновременно открывая базу данных).

Я рекомендую вам поместить все в одно специализированное действие контроллера.