소리소문 없이... 사랑도 명예도 이름도 남김 없이...
DexCore.net

C# 258

fixed

unsafe 영역안에서 포이터를 사용하는건 스택으로 데이터를 저장하는 값형식의 변수에서만 가능합니다. 참조형식의 변수에서 포인터를 사용할 수 없는 이유는 참조형식의 데이터는 힙에 할당되고 힙은 가비지 컬렉터에 의해 위치가 바뀔 수 있기 때문입니다. 결국 참조형식의 주소를 갖고 있던 포인터는 언제라도 전혀 엉뚱한 곳을 가리킬 수 있기 때문입니다. fixed는 힙에 할당된 참조 형식의 인스턴스를 가비지 컬렉터가 건드리지 못하게 하여 위에서 말한 문제를 해결할 수 있도록 합니다. static void Main() { unsafe { string s = "abcdefg"; fixed (char* c = s.ToCharArray()) { for (int i = 0; i < s.Length; i++) Console..

C# 2018.06.29

문자열 보간($)

흔히 문자열을 출력하는 경우를 보겠습니다. string s = "guest"; Console.WriteLine("안녕하세요. {0}님", s); 여기서 문자열 보간기능을 하는 $문자를 사용하면 다음처럼 간단히 문자열 표현이 가능합니다. string s = "guest"; Console.WriteLine($"안녕하세요. {s}님"); 문자열 보간은 컴파일시에 단지 소스코드를 string.Format변환할 뿐이므로 string.Format형식에 맞는 포멧을 지정할 수 있습니다. Console.WriteLine($"안녕하세요. {s.ToUpper()}님"); 출처: http://lab.cliel.com/entry/문자열-보간?category=478966 [CLIEL LAB]

C# 2018.06.29

nameof

사용자에게 특정 내용을 표현해서 보여주고자 할때 변수의 이름을 그대로 출력해야 하는 경우가 있습니다. string Name = "guest"; Console.WriteLine($"Hello! Your Name : {Name}"); 위 예제에서 Name이 그러한 경우인데 이처럼 단순 문자열로 표현해도 되지만 특별히 nameof를 사용해서 표현할 수도 있습니다. string Name = "guest"; Console.WriteLine($"Hello! Your {nameof(Name)} : {Name}"); 굳이 변수명을 이렇게 할 이유는 혹시라도 변수명이 바뀌었을때 오류를 발생시켜 항상 변수의 이름을 정확히 표현할 수 있도록 하기 위함입니다. 변수명을 단순히 문자열로 표현해 버리면 컴파일과정에서 변수명이 바..

C# 2018.06.29

dynamic

dynamic은 언뜻 var와 비슷해 보이지만 dynamic d = 10; int sum = 10 + d; Console.WriteLine(sum); var는 초기값의 타입에 따라 변수의 타입이 결정되지만 dynamic은 프로그램이 실행될때 타입이 결정됩니다. 따라서 다음과 같은 구현도 컴파일시에는 오류를 일으키지 않고 컴파일이 진행될 수 있습니다. dynamic d = 10; d.callMethod(); 물론 실제 d에는 callMethod 라는 메서드가 정의되어 있지 않기에 프로그램이 실행되면 오류가 발생하게 될 것입니다. dynamic이 생김으로 인해서 가능한것 중 하나는 덕 타이핑(duck typing)이라는 것입니다. 예를 들어 서로 다른 클래스에서 동일한 메서드를 호출할때 사용가능한 방법중 하..

C# 2018.06.29

GZipStream - 문자열 압축과 해제

C# GZipStream 문자열 압축과 해제 많은 문자열을 네트워크를 통해 보낼때 CPU 비용 보다는 네트워크 비용을 줄이기 위해 사용할 수 있을것이다. 하지만 압축과 해제는 CPU뿐만 아니라 메모리에서도 제약 사항을 많이 받는다. 최대 4GB까지 지원하지만 압축된 데이터를 저장할 수 있는 메모리 공간과 압축 해제된 데이타를 저장할 수 있는 공간이 필요 하기에 예상보다 많은 메모리 사용량이 필요 할 수 있다. 그러르모 언제든지 OutOfMemoryException(OOM)이 발생할 수 있으며, InSufficientMemoryException 또한 발생할 수 있다. 그래서 실 사용에서는 사용환경에 맞게 최대 허용가능한 용량을 산정하여 사용할 필요가 있다. 실예로 모 사이트에서 수만 row의 값을 압축하여..

C# 2018.06.29

MemoryStream Compress

C# MemoryStream Compression Code Project에서 올라온 Memory기반 압축 Util이다. http://www.codeproject.com/Articles/6834/MemoryStream-Compression 관련 글 : 2013/02/15 - [.Net Framework] - [Compress] GZipStream - 문자열 압축과 해제 사용 방법은 아래와 같다. //압축 사용 법 using ICSharpCode.SharpZipLib.BZip2; BZip2OutputStream zosCompressed = new BZip2OutputStream(msCompressed); string sBuffer = "This represents some data being compress..

C# 2018.06.29

C# DataSet 압축

C# DataSet 압축 DataSet, DataTable(이하 DataSet으로만 언급하겠지만 DataTable도 같은 사항이다)을 무척이나 많은 용도로 사용하고 있다. DB 리턴값으로 사용하고 네트워크로 통해 넘겨서 클라이언트에서 사용할 수 있도록 한다. 그렇지만 많의 양의 DataSet을 옮기는 가운데 Loading time이 발생하게 된다. 더군다나 네트워크를 통해서 데이타를 보낼때에 더 심각한 UI 멈춤 현상이 발생 할 수도 있다. 그렇지만 네트워크로 조금이라도 압축된 상태로 줄어 들어 넘어 온다면 리드타임을 줄이는 도움이 돌 것으로 기대하며 Dataset압축에 대해서 알아보자. 아래는 DataSet 압축과 압축해제에 관한 소스 전체이다./// /// DataSet 압축 /// /// 압축할 D..

C# 2018.06.29
728x90
반응형