2012-01-19 2 views
5

ASP.NET MVC 응용 프로그램을 프로파일 링하는 중입니다. IIS에서 내 로컬 버전을 눌렀을 때 약 77kb의 객체를 비 직렬화하는 데 약 100ms 걸리는 것으로 나타났습니다.json.net의 성능이 77kb json 문자열보다

또한 im 프로파일 링 중에 CPU가 최대가되는 것처럼 보입니다. 매우 강렬한 비 직렬화 작업입니까, 아니면 다른 곳에서 봐야합니까?

도움을 주셔서 감사합니다.

+0

당신은 언제나 json.net과 프로필에 대한 소스를 얻을 수있어 매우 집중적 인 것을 볼 수 있습니다. 더 많은 정보 (또는 데이터)없이 무엇이든 제안하기가 어려울 것입니다. –

+0

VS 프로파일 러를 사용하여 샘플링을 한 결과, 샘플링 양이 가장 많았습니다. 'JsonConvert.DeserializeObject' – Mark

답변

2

개체의 복잡성은 일반적으로 비 직렬화와 관련하여 중요한 역할을합니다. 재귀 패턴으로 자식 개체를 포함하는 개체는 CPU와 메모리를 사용하여 올바르게 구문 분석합니다.

단순한 이름 : 값이 Name : Value의 다른지도 (개체) 인 경우 값지도가 훨씬 더 복잡해 질 수 있습니다. 이러한 유형의 재귀가 발생하면 시스템을 구문 분석하기가 더 쉽도록 JSON을 비정규 화 (이름 : [원시] 값으로 지정)하는 것이 좋습니다.

MVC (rdbms 데이터)에 대한 비정규 화는 약간 어려울 수 있습니다. 많은 경우에 다 대다 관계를 평평하게하는 것은 실현 가능하지 않습니다.

JSON.net을 내장 JavaScriptSerializer와 비교하여 개선 할 수 있는지 알아볼 수 있습니다.

0

JSON.NET을 비롯한 여러 직렬화 프레임 워크가 Reflection을 활용할 경우 특정 시점에서 객체가 좌절하게됩니다. 또한 오브젝트의 크기가 85KB에 도달하면 가비지 콜렉터가 대형 오브젝트 힙에 즉시 푸시 (push)하여 성능에 영향을줍니다.

성능을 향상시키고 메모리 병목 현상을 피하기 위해 성능이 뛰어나는 .NET JSON 파서 인 JSON#을 사용하는 것이 좋습니다.

관련 문제