반응형
이벤트 처리기에 람다 식 사용
현재 다음과 같이 선언 된 페이지가 있습니다.
public partial class MyPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//snip
MyButton.Click += (o, i) =>
{
//snip
}
}
}
최근에야 1.1에서 .NET 3.5로 이동했기 때문에 Page_Load 외부에서 이벤트 처리기를 작성하는 데 익숙합니다. 내 질문은; 이를 위해 람다 메서드를 사용할 때주의해야 할 성능 단점이나 함정이 있습니까? 확실히 더 간결하기 때문에 선호하지만 사용하기 위해 성능을 희생하고 싶지는 않습니다. 감사.
컴파일러가 람다 식을 동등한 대리자로 변환하므로 성능에 영향을주지 않습니다. Lambda 표현식은 컴파일러가 작업하는 데 익숙한 것과 똑같은 코드로 번역하는 언어 기능에 지나지 않습니다.
컴파일러는 가지고있는 코드를 다음과 같이 변환합니다.
public partial class MyPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//snip
MyButton.Click += new EventHandler(delegate (Object o, EventArgs a)
{
//snip
});
}
}
성능면에서는 명명 된 메서드와 동일합니다. 큰 문제는 다음을 수행 할 때입니다.
MyButton.Click -= (o, i) =>
{
//snip
}
아마도 다른 람다를 제거하고 원래는 그대로 두려고 할 것입니다. 그래서 교훈은 핸들러를 제거 할 수 있기를 원하지 않는 한 괜찮다는 것입니다.
EventHandler handler = (s, e) => MessageBox.Show("Woho");
button.Click += handler;
button.Click -= handler;
"구문 적 설탕"을 알고 있고 델리게이트 구문 등을 사용하는 것과 동일한 것으로 컴파일하는 한, 내가 알고 있거나 경험 해본 성능 관련 문제는 없습니다.
참고 URL : https://stackoverflow.com/questions/2465040/using-lambda-expressions-for-event-handlers
반응형
'IT story' 카테고리의 다른 글
Hadoop 바이너리 경로에서 winutils 바이너리를 찾지 못했습니다. (0) | 2020.08.17 |
---|---|
SVN : 일부 디렉토리를 재귀 적으로 무시합니다. (0) | 2020.08.17 |
CA2202,이 사건을 해결하는 방법 (0) | 2020.08.17 |
Kotlin : 인터페이스…에는 생성자가 없습니다. (0) | 2020.08.17 |
PostgreSQL의 하위 쿼리에서 업데이트 또는 삽입 (여러 행 및 열) (0) | 2020.08.17 |