내보기에서 foreach
을 사용하여 강력한 형식의 모델을 반복하고 표를 표시합니다. 25 행 7 열만 있으면 약 280 밀리 초가 걸립니다. 이것은 느린 것 같습니다. 뷰에서 루프를 사용하기 위해 알아야 할 성능 트릭이 있습니까?ASP.NET MVC View에서 foreach 루프가 왜 느린가요?
편집 : 내 컨트롤러는 Azure 테이블에서 데이터를 가져 와서 ViewModel 패턴을 사용하여보기로 가져옵니다. 이 문제에 관해서는 모르겠지만 내 Views는 VB이고 내 모델은 C#입니다. 그래서, 그들은 별도의 프로젝트에 있습니다. 게시 할 수있는 슬림화 된 예를 생각해 내겠다. 그러나 나는 지금 문을 다 써 버렸고, 오늘 저녁 늦게 이것을해야 할 것이다. 사람들이 주말에 집에 가기 전에 StackOverflow 군중을 잡기를 바랬습니다. 그래서 원래의 게시물은 예제 코드없이 빠르게 만들어졌습니다.
편집 : 나는 게으름 짐이 일어나지 않았 음을 피들러에게 확인했습니다. 보기를 렌더링하는 동안 피들러 활동이 없습니다.
EDIT : Azure 테이블의 데이터로 뷰를 공급하는 경우 280 msec가 소요됩니다. Azure 테이블에서 실제 데이터처럼 보이는 위조 된 데이터로 동일한 뷰를 피드하면 60msec가 걸립니다. 두 경우 모두 컨트롤러는 ViewModel 객체를 채우고 뷰로 전달합니다. 두 인스턴스에서 동일한 ViewModel 클래스가 사용됩니다. 나는 그것을 얻지 않는다.
편집 : 생각났습니다. 아마도 처음에 코드를 포함 시켰 더라면 다른 모든 사람들에게는 이것이 분명했을 것입니다. 여기 내 뷰 모델입니다 : 내보기에 위의 ViewModel을 통과하면
public class EmployeeChildrenViewModel
{
public Employee employee;
public IEnumerable<Child> children;
}
의 foreach
280 밀리 초 걸립니다. 위의 ViewModel을 children.ToList()
으로 채우면보기에는 60msec 밖에 걸리지 않습니다. 그러나 추가 조사를 통해 전체 페이지로드 시간이 두 경우 모두 동일하다는 것을 알 수 있습니다. IEnumerable이 내 컨트롤러 또는 내 View에서 반복되는 경우 전체적인 효과가 동일하므로 중요하지 않습니다. 필자는 Fiddler에서 확인한 바와 같이 그 시점에서 데이터베이스를 때리는 것이 아니라는 것을 알고 있기 때문에 여전히 children
을 반복하는 것이 확실하지 않습니다.
반복 할 내용을 알려주십시오. 무언가가 무거울 수도 있고 실제로 실현되지 않을 수도 있습니다. 문제에 대한 정보를 제공하지 않았습니다. – Karl
몇 가지 코드를 보여 주시겠습니까? –
@ eu-ge-ne & @Karl : 죄송합니다. 처음에 그렇게 했어야했습니다. 코드가 게시되었습니다. – royco