본문 바로가기

[IL2CPP] Avoid Boxing Avoid BoxingIL2CPP OPTIMIZATION : Avoid Boxing Boxing은 코스트가 높은 연산이다. 이 글에서는 기존 C# 컴파일러는 특정한 상황에서 불필요한 Boxing이 수행되고, IL2CPP가 이를 어떻게 회피하는지를 보여준다.기존 C# 컴파일러의 방식interface HasSize { int CalculateSize(); } struct Tree : HasSize { private int years; public Tree(int age) { years = age; } public int CalculateSize() { return years*3; } }public static int TotalSize(params T[] things) where T : HasSize { va.. 더보기
[C#] Linq.Expression Snippets 원본 : https://github.com/pjc0247/LinqExpressionSnippets LinqExpressionSnippetsSystem.Linq.Expression 네임스페이스 아래의 기능들에 대한 복붙용 코드 조각들. Lambda를 Expression으로 전달받기람다의 타입 판별public static void Foo(Expression f) { // Foo(() => Math.Abs(1)); if (f.Body is MethodCallExpression) Console.WriteLine("MethodCallExpression"); // Foo(() => pos.x); if (f.Body is MemberExpression) Console.WriteLine("MemberExpression.. 더보기
[MSIL] 람다식의 캡쳐 구현하기 쓰다말음 void Foo(int a, int b, int c) { return a + b + c; } var Foo2 = (int c) => { return Foo(10, 20, c); }; 위의 경우처럼 함수의 인자를 줄이기 위해서 람다식을 사용하는 경우가 있다.c++의 std::bind 같은 메소드가 제공되면 편하겠지만, C#은 그러한 메소드를 제공하지는 않는다. 정상적인 코드라면 그러한 메소드를 사용하는것보다 람다함수의 캡쳐를 쓰는게 훨씬 낫기 때문에. 하지만 런타임에 위 코드처럼 어떤 메소드의 인자를 줄이고 싶은 상황에서는 상당히 불편하다. 따라하기 위해서는 먼저 C# 컴파일러가 람다와 캡처를 어떻게 처리하는지를 알아야 할 필요가 있다. (보고 배끼기 위해서) string message = "He.. 더보기