Development Experience/C# (20) 썸네일형 리스트형 C# Memory Leak 해결 툴 Memory Leak을 측정하는 방식 중 2가지를 발견하였다. 하나는 perfMon을 사용하는 방식이고, 다른 하나는 Memory Profiler를 사용하는 방식이다. [ perfMon ] 1. Task Manager 는 정확한 성능 상태를 측정하지 못한다. 사용하는 메모리가 아닌 할당된 메모리를 보여주고 그마저도 다른 프로세스에서 사용하고 있을 수 있다. 2. 프로세스에서만 사용하는 메모리를 보기 위해서 private bytes 를 보아야 한다. 이는 performance counter를 통해 볼 수 있다. 3. 메모리 릭이 발생한다면 3가지를 알아보아야 한다. 1) What ? managed 메모리 릭인지, unmanaged 메모리 릭인지 2) How ? connection object 때문인지, 파.. C# Enum 을 int 로 캐스팅하는 효율적인 방법 [ 이슈 ] 클라이언트에서 관리하고 있는 Enum 형식의 데이터들을 서버로 전송해야되서 Enum 형을 int 형으로 캐스팅하려고 한다. 이 경우 바로 캐스팅하여 (int)EnumKind.EnumData1; 처럼 사용하면 될 것 같지만, Enum 형을 바로 int로 캐스팅할 경우 성능 저하가 발생한다. 성능저하를 최대한 줄이면서 캐스팅할 순 없을까? [ 배경 지식 ] 1. 박싱 / 언박싱 C#에서는 데이터 형식을 값 형식과 참조 형식으로 나눈다. 값 형식은 스택 영역에 데이터가 생성되고, 참조 형식은 힙 영역에 데이터가 생성되는 차이점이 있다. 박싱이란 값 형식을 참조 형식으로 변환하는 행위이고 (스택 영역의 데이터를 힙 영역으로 복사), 언박싱은 반대로 참조 형식을 값 형식으로 변환하는 행위이다. (힙 .. C# Error Message : Cannot modify the return value of 'Collection<...>' because it is not a variable Collection이 구조체(struct) 로 이루어져 있으면, Collection의 element에 접근해서 값을 변경하는 작업 시 에러가 난다. Collection의 값을 변경하려고 참조하는 순간 element의 복사가 이루어지고(element가 struct 이니까), 복사된 객체에 아무리 이런저런 수정을 하더라도 원본은 변경되지 않기 때문이다. 그래서 컴파일러가 애초에 의미없는 행동이라고 에러를 내뱉게 된다. 같은 이유로 struct로 이루어진 List도 element를 수정할 수 없다. [Exception] 지정된 파일을 찾을 수 없습니다. C# 을 이용하여 window service 를 start / stop 하는 과정에서 "지정된 파일을 찾을 수 없습니다." 라는 Exception 이 발생하였다. 디버깅 결과, 해당 서비스의 레지스트리 값이 손상되어서 발생하였음을 알게 되었다. "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\" + "해당 서비스 이름" 이전 1 2 3 다음