본문 바로가기

반응형

전체 글

(186)
async 메서드의 void 반환 타입 사용에 대하여 & 가이드라인 [Figure 2 Exceptions from an Async Void Method Can’t Be Caught with Catch] 만약 AsyncTask 메서드가 Task를 반환하지 않는 async void였다면, 그것을 호출하는 CallAsyncTaskAwait 메서드에서는 Task 객체의 GetAwaiter()를 호출할 수 없어 결국 TaskAwatier.GetResult 메서드도 사용할 수 없어 예외가 먹히는 것입니다. 즉, async가 적용된 AsyncTask의 내부에서 예외가 try/catch로 처리되었지만 그것이 AsyncVoidMethodBuilder.SetException으로 보관되어 있었으므로 이를 TaskAwatier.GetResult() 메서드 내에서 구해 throw 처리를 할 수..
어셈블리 정보를 이용한 버전 관리, 자동 증가 어셈블리 정보 자동 변경 설정(.Net Framwork) 1. AssemblyInfo.cs 파일의 제일 하단으로 이동 2. "[assembly: AssemblyVersion("1.0.0.0")]", "[assembly: AssemblyFileVersion("1.0.0.0")]"를 주석 처리하고 3. 주석 처리되어있는 "[assembly: AssemblyVersion("1.0.*")]"를 활성화한다. [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.0.0")] // [assembly: AssemblyFileVersion("1.0.0.0")] 4. 위와 같이 변경한다면 CS8357 에러가 발생한다. 5. 프로젝트 폴더로 이동하여..
Marshal.PtrToStructur (Returning pointers from unmanaged to managed code) 관리되지 않는 메모리 블럭의 데이터를 지정된 형식의 새로 할당된 관리되는 개체로 마샬링한다. [ComVisibleAttribute(true)] public static Object PtrToStructure ( IntPtr ptr, Type structureType ) structureType는 형식이 지정된 클래스나 구조체여야 한다. 즉, 참조 타입, 값 타입 모두 가능하다. 다만 레이아웃이 sequential 또는 Explicit로 설정되어 있어야 한다. 값 형식이 전달될 경우 반환값은 boxing된 인스턴스이다. 리턴값이 object 타입이므로 사용할 때는 사용하려는 타입으로 형변환 하여 사용해야 한다. [C++] SomeData* test(); typedef struct _Data Data; st..
관리되는 코드, 관리되지 않는 코드 [관리되는 코드] .NET CIL로 작성하고 컴파일 하는 .NET상의 코드 -> GC 메모리 관리가 된다. [관리되지 않는 코드] 기계 코드를 직접 컴파일 하도록 컴파일되는 .NET에 없는 코드 -> GC 메모리 관리가 안 된다. [IntPtr - 인터포인터] - 관리되지 않는 메모리 블록에 대한 포인터 정수형 포인터를 의미하는 값 형식의 타입 포인터는 메모리 주소값을 보관하는 곳 IntPtr타입은 메모리 주소를 가리키는 것 외에 윈도우 OS의 핸들값을 보관하는 용도로 쓰인다. 핸들은 윈도우OS가 특정 자원에 대한 식별자로서 보관하는 값인데 일례로 파일이 좋은예다. 파일처리, OS에서 제공되는 것 처리를 할 때 사용된다. [Marshal Class - 마샬] 관리되지 않는 메모리 블록 관리되는 데이터 블..
Closure, SOH(Small Object Heap), LOH(Large Object Heap) 오류 발생 원인과 해결방안 FirstOrDefault 함부로 사용하면 안 되겠다,, 해결방안은 아래 출처에서 보기 사용하더라도 1. 최대한 모수 줄이기 2. 그래도 많은 경우에는 메소드 따로 만들고 Foreach로 따로 List 만들어서 반환해주기(아래 출처 참고) [출처] https://www.jetbrains.com/help/resharper/2021.3/Fixing_Issues_Found_by_DPA.html
Find vs FirstOrDefault vs Where + FirstOrDefault vs for loop 속도 비교 for loop(408.2 ms) > Find(430.4 ms) > Where + FirstOrDefault(516.9 ms) > FirstOrDefault(585.6 ms) 순으로 속도가 차이난다. 관련돼서 내가 쓴 글 - https://leejooyeon.tistory.com/39 [출처] https://yunhyeon.tistory.com/380
FirstOrDefault vs Where.FirstOrDefault FirstOrDefault vs Where + FirstOrDefault - 성능은 동일한데 후자의 속도가 더 빠름. [출처] https://github.com/dotnet/runtime/issues/30119 https://stackoverflow.com/questions/8059285/c-sharp-linq-whereexpression-firstordefault-vs-firstordefaultexpression
[ReSharper] Dynamic Program Analysis(DPA) 사용하기 Visual Studio 환경에서 실행하는 방법 1. 상단 메뉴에서 확장 -> ReSharper -> Options 2. Dynamic Program Analysis -> General -> Enable Dynamic Program Analysis during debugging 체크박스에 체크하고 저장한다. (위에 1, 2번 과정없이 하단의 DPA 아이콘을 왼쪽 마우스 클릭 후 Enable~~~를 클릭해도 된다. - 아래 사진 참조) 3. 프로그램 디버깅을 한다. 4. 프로그램 종료 후, 메모리 이슈가 있는지 확인한다. 메모리 이슈도 알 수 있고, 어디서 이슈가 났는지 메소드로 이동도 가능해서 좋다. [출처] https://www.jetbrains.com/help/resharper/Dynamic_Prog..

반응형