2013-10-24 8 views
1

애스펙트 생성자가 컴파일 타임에 호출 된 다음 애스펙트 인스턴스가 직렬화 된 다음 런타임에 비 직렬화된다는 것을 알게되었습니다.PostSharp - 애스펙트 생성자 직렬화

왜 이런 일이 발생합니까? 애스펙트의 생성자를 호출하는 대신에 deserialization을 수행하는 것이 더 빠릅니까?

답변

1

설명 된 프로세스는 주로 컴파일 타임에 일부 aspect 필드를 초기화 할 수있게 해주고, deserialization은 프로그램이 실행될 때마다 값을 복원합니다. 필드 계산이 비싸다면 런타임 성능을 향상시킬 수 있습니다. 컴파일시 한 번만 실행할 수 있습니다.

예를 들어 메소드 이름, 매개 변수, 유형에 대한 정보가 이미있는 것처럼 컴파일 시점에 로깅 애스펙트의 형식 문자열을 빌드하고자 할 수 있습니다.

전체 화면 라이프 사이클이 페이지에 자세히 설명되어 있습니다 : http://doc.postsharp.net/content/aspect-lifetime

그러나 시간이 초기화를 컴파일 할 필요가 없습니다 경우에, 또한 직렬화 단계를 피하기 위해 더 좋을 수 있습니다. PostSharp를 사용하면 MsilAspectSerializer을 사용하여이를 수행 할 수 있습니다. 실제로 생성자를 호출하고 특성 및 필드를 설정하는 지시 사항을 생성합니다.

이 경우는 여기에 설명되어 있습니다 : http://doc.postsharp.net/content/aspect-serialization

[OnMethodBoundaryAspectConfiguration(SerializerType=typeof(MsilAspectSerializer))] 
public sealed MyAspect : OnMethodBoundaryAspect 
{ 
    // 
}