쾌락없는 책임 (공부)/C# 짜잘이
-
[C#] is null vs == null쾌락없는 책임 (공부)/C# 짜잘이 2023. 1. 15. 18:47
개요 친한 지인이 한번 질문을 했었습니다. 'is null이 == null보다 빠르다는데 이거 원리를 아냐?'. 완전 처음 듣는 이야기라 바로 검색을 해 봤는데 또 처음 보는 내용들이 올라와서 답장을 할 수 없었습니다. 그래서 이번에 한번 결과를 알아보기로 하고 조사를 해 봤습니다. 일단 is null이 빠른 게 맞다 일단 10,000,000개의 비교를 해본 결과 확실한 차이가 드러났습니다. 10배 이상의 차이가 나게 되므로 비교를 할 때 is로 해야 함이 확실해졌습니다. 언제부터? 7.0부터 What's New in C# 7.0 Update (4/2017): See New Features in C# 7.0, the update to this post. What follows is a descriptio..
-
[C#] C# 에서 상호 참조는 어떻게 해결이 될까?쾌락없는 책임 (공부)/C# 짜잘이 2022. 8. 6. 15:03
개요 일단 C++의 unique_ptr을 보면 shared_ptr이 나오는 배경을 알 수 있습니다. 그리고 shared_ptr을 보게 되면 상호 참조 문제로 인해서 delete되지 않을 우려가 있기에 weak_ptr이 나오게 됩니다. 이런 이야기들은 포인터가 프로그래머에게 직접 보이는 C++의 이야기이고 포인터가 내부적으로 작동하고 밖에서는 볼 수 없는 C#과는 다른 이야기로 보이게 됩니다. C#에서 delete 작업은 전적으로 GC에게 위임하고 있으며 이 GC의 동작을 알아보면 항상 '자동으로 쓰이지 않는 객체를 비할당' 해준다고 되어 있습니다. 그렇다면 C++의 shared_ptr에서 나오는 문제인 상호 참조 문제는 C#에서 어떻게 해결하고 있을까요? C# GC는 mark and sweep 방식이다 ..
-
[C#] C# string vs stringbuilder, stringbuilder는 어떻게 이득이 될까?쾌락없는 책임 (공부)/C# 짜잘이 2022. 8. 6. 13:19
string vs stringbuilder 기존 C#의 string은 참조 타입이며 수정을 하게 되면 새로운 string 객체가 생기고 새 객체로 대체되는 형식입니다. 이와 동시에 이전 객체는 남아있게 되어 GC 대상이 됩니다. 때문에 자주 변경될 문자열이라면 stringbuilder를 사용해야 한다는 이야기입니다. 왜 string은 immutable이 되었을까? 이는 string이 immutable 객체로 만들어져 있어서 한번 값이 정해진 뒤 수정을 할 수 없기 때문입니다. 그러면 왜 이렇게 변경할 수 없는 객체로 만들어서 가비지를 생성하는, 겉보기에 비효율적인 방법을 체택했을까요? .Net 에서 string이 변경 불가능 객체인 이유는 멀티스레드 환경을 고려한게 커 보입니다. 여러 프로세스가 엑세스를..