본문 바로가기

C#83

[C#] Async/Await, Task.result Await 와 result의 차이 질문 - ⁉️ .NET Overflow (Q&A) - 닷넷데브 (dotnetdev.kr) Await 와 result의 차이 질문 c# - Await vs Task.Result in an Async Method - Stack Overflow c# - How does Task become an int? - Stack Overflow 이 질문과 비슷하게 async task에서 await와 그냥 void에서 task.result의 차이를 위 링크에서 읽어봤는데 잘 이해가 forum.dotnetdev.kr async task에서 await와 그냥 void에서 task.result의 차이가 궁금해 참고 링크 정리 public async Task POSTDataTaskAsync(ob.. 2021. 4. 12.
[C#] Best Way Byte To Hex https://forum.dotnetdev.kr/t/byte-hex-16/632/4?u=tjdskaqks Byte 배열을 Hex(16진수) 문자열로 변환하는 방법 .NET Core 5 + Benchmark 테스트 결과입니다. Score: 1690.9 / 186.5 = 9.066487935656836 변환 코드 const string table = "0123456789ABCDEF"; return string.Create(Size * 2, _buffer, static(span, buffer) => { for (int i = 0; i < Size; i++) { span[0] = forum.dotnetdev.kr 문제] 8192 * 10000 바이트 배열을 난수로 생성 후, 이를 16진수 HEX 문자열로 변환한.. 2021. 4. 11.
[C#] 윈도우 마이크 컨트롤 (AudioSwitcher, NAudio) 1. 최소 사양을 맞추기 위해 .NET Framework 4.5.2 버전을 사용 2. Winform, UserControl 사용 가능 3. 비주얼 스튜디오 16.9.3 1. 음소거 버튼 - 패널로 사용 (PictureBox로 대체가능) 2. ContextMenuStrip에 마이크와 믹서로만 사용하게 함 (별도로 마이크 리스트 전부를 가져와도 됨) 3. NAudio에는 마이크 기본 장치 변경이 없어 AudioSwitcher를 사용 4. NAudio는 이벤트, AudioSwitcher는 IObservable using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Draw.. 2021. 4. 6.
[C#] PDF 읽기 위시켓을 보던 중 PDF 파일을 읽어 내어 표시하고 문자를 찾는 기능이 필요한 프로젝트가 있어 짧게나마 만들어 봄. 문자열 찾기는 [C#] 문자열에 특정 문자 개수 찾기 (tistory.com) 에서 확인하면 됨. 1. .NET 5 2. iTextSharp using System; using System.IO; using System.Text; using System.Windows.Forms; using iTextSharp.text.pdf; using iTextSharp.text.pdf.parser; namespace ReadAndFindPDF { public partial class Form1 : Form { public Form1() { InitializeComponent(); this.Load +=.. 2021. 2. 27.
[C#] CPU, RAM, HDD 사용량 및 OS Version, Last boottime 확인 1. HDD DriveInfo[] drives = DriveInfo.GetDrives(); foreach (var drive in drives) { switch (drive.DriveType) { case DriveType.Unknown: break; case DriveType.NoRootDirectory: break; case DriveType.Removable: break; case DriveType.Fixed: textBox1.Text += $"Name = {drive.Name}, TotalSize = {drive.TotalSize / 1024 / 1024 / 1024}, TotalFreeSpace = {drive.TotalFreeSpace / 1024 / 1024 / 1024}" + Environ.. 2021. 2. 10.
[C#] 공공 데이터 오픈 API 사용(제대 군인 채용 정보 얻기) 공공데이터포털 : 공공데이터포털 (data.go.kr) 공공데이터 포털 국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase www.data.go.kr 국가보훈처 보훈대상자 취업정보 : 오픈API 상세 | 공공데이터포털 (data.go.kr) 공공데이터 포털 국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase www.data.go.kr 국가보훈처 오픈 API : 국가보훈처 (mpva.go.kr) 국가보훈처 category s.. 2021. 1. 2.
[C#] 카카오페이지 크롤링 ※ 개인의 호기심을 해결하기 위해 기능 구현만 함. 저작권은 항상 조심. 1. .NET 5 2. 셀레니움(3.141.0) 3. Microsoft Edge - 참고 1 : WebDriver (Chromium) - Microsoft Edge Development | Microsoft Docs WebDriver (Chromium) - Microsoft Edge Development Learn how to test your website or app in Microsoft Edge or automate the browser with WebDriver. docs.microsoft.com - 참고 2 : WebDriver - Microsoft Edge Developer WebDriver - Microsoft Edg.. 2021. 1. 1.
[C#] gRPC 와 LiteDB 사용 gRPC 참고 링크 - What is gRPC? – gRPC What is gRPC? A high-performance, open source universal RPC framework grpc.io - gRPC 서비스와 HTTP API 비교 | Microsoft Docs gRPC 서비스와 HTTP API 비교 gRPC와 HTTP API를 비교한 방법과 권장 시나리오를 알아봅니다. docs.microsoft.com LiteDB 참고 링크 - LiteDB :: A .NET embedded NoSQL database LiteDB :: A .NET embedded NoSQL database LiteDB : LiteDB - A .NET NoSQL Document Store database in a single .. 2020. 12. 15.
[C#] TCP Listener을 이용한 비동기 C# 5.0 + .NetFramework 4.5에서 기존 Socket이 아닌 TcpClient의 NetworkStream 타입에 async/await 메서드가 추가되었다. [C#] TCP Socket을 이용한 통신 (tistory.com) [C#] TCP Socket을 이용한 통신 TCP 참고 : TCP - 나무위키 (namu.wiki) TCP - 나무위키 TCP는 전화를 거는 것처럼 상대와 연결을 설정하고 통신을 시작한다. 절차는 아래와 같다. Three Way Handshake 1) 상대에게 통신을 하고 싶다는 메시지 jcoder1.tistory.com 위 방법을 비동기로 바꿔본다. 참고 MSDN : TcpListener 클래스 (System.Net.Sockets) | Microsoft Docs Tc.. 2020. 12. 4.
[C#] UDP Socket을 이용한 통신 UDP 참고 : UDP - 나무위키 (namu.wiki) UDP - 나무위키 데이터 신뢰성 문제가 있는 프로토콜이라 우스갯소리로 Unreliable Damn Protocol(믿지 못할 빌어먹을 프로토콜)의 축약어라 부르는 경우도 있다. UDP라는 독자적인 규약으로 떨어져 나오긴 했으나 사 namu.wiki 1. 서버 class Program { static void Main(string[] args) { Console.WriteLine("UDP Server"); ServerFunc(); } private static void ServerFunc() { // IPv4, 스트림, TCP --> TCP는 스트림으로, UDP는 데이터그램으로 using (Socket svrSocket = new Socket(Ad.. 2020. 12. 4.
[C#] TCP Socket을 이용한 통신 TCP 참고 : TCP - 나무위키 (namu.wiki) TCP - 나무위키 TCP는 전화를 거는 것처럼 상대와 연결을 설정하고 통신을 시작한다. 절차는 아래와 같다. Three Way Handshake 1) 상대에게 통신을 하고 싶다는 메시지를 보낸다. (SYN) 2) 상대는 그 메시지에 대한 응답 namu.wiki 1. 서버 class Program { static void Main(string[] args) { Console.WriteLine("Tcp Server"); ServerFunc(); } private static void ServerFunc() { // IPv4, 스트림, TCP --> TCP는 스트림으로, UDP는 데이터그램으로 using (Socket svrSocket = new So.. 2020. 12. 4.
[C#] 8.0 고성능이 필요한 환경에서 GC가 발생하지 않는 네이티브 힙 사용 .NET Framework: 866. C# - 고성능이 필요한 환경에서 GC가 발생하지 않는 네이티브 힙 사용 (sysnet.pe.kr) { // 무한 루프를 돌며, while (count-- > 0) { / Native Heap, 즉 비-관리 힙으로부터 배열 메모리 할당 using (NativeMemory buf = new NativeMemory(bufSize)) { Span viewBuf = buf.GetView(); viewBuf[0] = 0; viewBuf[bufSize - 1] = 0; } } }; } 2020. 12. 1.
[C#] BCL DataContractJsonSerializer을 이용한 객체 JSON 직렬화 닷넷에서 직렬화/역직렬화 방식은 3가지가 있다. 1. BinaryFormatter 2. XmlSerializer 3. DataContractJsonSerializer // 참고 MSDN : DataContractJsonSerializer 클래스 (System.Runtime.Serialization.Json) | Microsoft Docs DataContractJsonSerializer 클래스 (System.Runtime.Serialization.Json) 개체를 JSON(JavaScript Object Notation)으로 직렬화하고 JSON 데이터를 개체로 역직렬화합니다.Serializes objects to the JavaScript Object Notation (JSON) and deserializ.. 2020. 11. 30.
[C#] BCL MemoryStream, StreamWriter/Reader, BinaryWriter/Reader Stream 타입은 일련의 바이트를 일관성 있게 다루는 공통 기반을 제공한다 Stream의 사전적 의미는 "흐름"인테, 프로그래밍에서 사용될 때는 일반적으로 "바이트 데이터의 흐름"을 의미하며 흐름이라는 단어에서 의미하는 Stream은 데이터를 쓰고 읽는 작업을 순서대로 하는 것이 기본 정책이다. MemoryStream은 Stream 추상 클래스를 상속받은 타입니다. 메모리에 바이트 데이터를 순서대로 읽고 쓰는 작업을 수행하는 클래스다. 이를 이용하면 데이터를 메모리에 직렬화/역직렬화 하는 것이 가능하다. static void Main(string[] args) { Console.WriteLine("System.IO. MemoryStream, StreamWriter/Reader, BinaryWriter/.. 2020. 11. 29.
[C#] BCL Regex 정규식을 이용한 이메일 규칙 판별 1. 기본 방법 (정규식 이용 x) * 반드시 @ 문자를 한번 포함해야 한다. * @문자 이전의 문자열에는 문자와 숫자만 허용된다(특수문자 x) * @문자 이후의 문자열에는 문자와 숫자가 허용되지만 반드시 하나의 . 이 포함되어야 한다. static void Main(string[] args) { Console.WriteLine("System.Text.RegularExpressions.Regex"); string email = "tjdskaqks@gmail.com"; Console.WriteLine(IsEmail(email)); } private static bool IsEmail(string email) { string[] parts = email.Split('@'); if (parts.Length !.. 2020. 11. 29.
[C#] BCL Encoding 타 언어 프로그램과 데이터 주고 받기 static void Main(string[] args) { Console.WriteLine("System.Text.Encoding"); string textData = "Hello World"; byte[] buf = System.Text.Encoding.UTF8.GetBytes(textData); // // buf 바이트 배열을 타 언어 프로그램으로 전달. // byte[] receivedbuf = ... // 타 언어 프로그램으로부터 전달받은 바이트 배열 데이터 string receivedText = System.Text.Encoding.UTF8.GetString(receivedbuf); } 2020. 11. 29.
[C#] BCL string과 StringBuilder의 차이점 string 타입은 불변 객체(immutable object)이기 때문에 string에 대한 모든 변환은 새로운 메모리 할당을 하게된다. 예를 들어 string.ToLower() 메소드를 보자. string txt = "Hello World"; string lwrTxt = txt.ToLower(); txt 변수는 힙에 있는 "Hello World"를 가리킨다. 그 상태에서 ToLower()를 호출하면 원문이 통째로 복사된 다음에 그것이 소문자로 변경되어 반환된다. 불변 타입의 string 클래스가 발생시키는 가장 큰 문제는 문자열을 더할 때다. 아래 코드를 실행 결과 8초가 걸렸다. // string 1. 힙(heap)에 "Hello World" 문자열을 담은 공간을 할당. 2. 스택에 있는 txt 변수.. 2020. 11. 29.
[C#] BCL string Format 자리수 지정 {번호 [, 정렬][: 형식문자열]} 번호(필수) : 0부터 시작 정렬(선택) : 번호에 대응되는 문자열의 최소 너비를 지정. 만약 대응 문자열의 길이는 5인데 정렬되 지정된 숫자가 10이라면 나머지 5의 너비는 공백으로 채워짐. 정렬 값이 음수면 왼쪽으로, 양수면 오른쪽으로 정렬이 된다. 만약 정렬값이 생략되면 대응되는 문자열의 길이대로 출력된다. 형식문자열(선택) : 대응되는 인자의 타입에서 직접 구현하고 있는 형식 문자열이 사용됨. static void Main(string[] args) { Console.WriteLine("string Format 이용"); string txt = "{0, -10} * {1} == {2, 10}"; // 실행결과 사진을 보면 왼쪽으로 정렬되어 있고 5*6(30)은.. 2020. 11. 28.
[C#] BCL - string 대소문자 구분 EndWith, IndexOf, StartWith의 기본은 대소문자를 구분한다. 구분하고 싶지 않다면 두번째 인자에 StringComparison.OrdinalIgnoreCase 를 추가하면 된다. static void Main(string[] args) { Console.WriteLine("영문자 대소문자 구분 방법"); string txt = "Hello World"; Console.WriteLine($"{txt} EndWith(\"WORLD\"): {txt.EndsWith("WORLD")}"); Console.WriteLine($"{txt} EndWith StringCoparion.OrdinalIgnoreCase(\"WORLD\"): {txt.EndsWith("WORLD", StringCompari.. 2020. 11. 28.
[C#] BCL - Stopwatch로 시간차 계산 static void Main(string[] args) { Console.WriteLine("StopWatch을 이용한 시간차 계산"); System.Diagnostics.Stopwatch st = new System.Diagnostics.Stopwatch(); st.Start(); sum(); st.Stop(); // st.ElapsedTicjs 속성은 구간 사이에 흐른 타이머의 틱 수 Console.WriteLine($"Total Ticks : {st.ElapsedTicks}"); // st.ElapsedMilliseconds 속성은 구간 사이에 흐른 시간을 밀리초로 반환 Console.WriteLine($"millisecond : {st.ElapsedMilliseconds}"); // 밀리초로 흐.. 2020. 11. 28.