프로그래밍
-
c# Regex의 패턴은 캐싱 된다.프로그래밍/의문 2019. 5. 10. 13:45
정규식이 함수 안에 있으면 정규식 인스턴스가 만들어질 때마다 패턴이 컴파일이 되는 건가 해서 Regex를 static 인스턴스로 만들어두고 사용했었다. static Regex regex = new Regex("My Pattern"); // ... bool IsValid(string str) { return regex.IsMatch(str); } 찾아보니 최근 사용한 15개 정도의 정규식은 캐싱된다고 한다. 캐싱된 정규식을 이용하려면 다음과 같이 하면 된다. bool IsValid(string str) { string pattern = "My Pattern"; return Regex.IsMatch(pattern, str); // 정규식 패턴 풀에서 가져옴 } https://docs.microsoft.com..
-
할당한 메모리가 working set에 잡히지 않던 현상프로그래밍/의문 2019. 4. 23. 23:32
내가 만든 서버를 띄우고 윈도우 작업 관리자에서 메모리 점유율을 확인하니 할당한 메모리에 비해 턱없이 적은 메모리가 잡히고 있었다. 적어도 1gb는 잡혔어야 했는데 약 180mb만 잡혔던 것이다. 할당이 안 되고 있던 건가 했는데 그건 아니었고, 혹시나 해서 Virtual memory size를 확인해보니 거기에는 잡혀있더라. 메모리 엑세스가 되지 않아서 그런 걸까? 그럼 억지로 메모리를 엑세스 해 Working set으로 올라가지 않을까? 라는 생각에 memset을 이용해 할당한 메모리에 접근하도록 해봤다. // 테스트를 위한 메모리 강제 접근 memset(recvbuf.ptr(), 0, recvbuf.size()); memset(sendbuf.ptr(), 0, sendbuf.size()); 그러자 실..
-
boost asio 사용 시 win32 버전을 지정하지 않으면 io_context::run이 빠져나가는 현상프로그래밍/의문 2019. 4. 14. 04:09
asio를 이용해 tcp 서버를 만들었는데 async_accept 이벤트가 등록되어있음에도 io_context::run을 벗어났다. _WIN32_WINNT에 타겟 윈도우 버전을 지정하니 벗어나는 현상이 없어졌다.(_WIN32_WINNT=_WIN32_WINNT_WIN10) 추가적인 확인 필요 발생한 상황 서버는 최대 세션이 10개 받아지도록 되어있다. 세션이 끊어지면 소켓을 닫고 닫힌 소켓에 async_accept를 걸도록 되어있다. 클라이언트는 100개의 세션을 동시에 연결하고 동시에 연결을 끊는다. 서버는 다시 async_accept를 걸었다는 로그가 찍혀있지만 아무 에러 없이 io_context::run이 빠져나갔다. 다음과 같은 상황에선 발생하지 않았다. 위 상황에서 서버는 최대 세션이 110개 받..
-
CRITICAL_SECTION의 default spin count프로그래밍/의문 2019. 4. 10. 01:24
CRITICAL_SECTION cs; InitializeCriticalSection(&cs); DWORD prevSpinCount = SetCriticalSectionSpinCount(&cs, 1000); SetCriticalSectionSpinCount는 파라미터인 CriticalSection의 SpinCount를 수정하고, 이전의 SpinCount 값을 반환한다. https://docs.microsoft.com/ko-kr/windows/desktop/api/synchapi/nf-synchapi-setcriticalsectionspincount SetCriticalSectionSpinCount function (synchapi.h) Sets the spin count for the specified c..
-
터미널(콘솔) 출력 메세지들 파일에 저장하기프로그래밍 2019. 4. 6. 23:42
c, c++이라면 printf, std::cout, c#이라면 Console.WriteLine, python이라면 print 등 터미널에 쓰여질 출력들을 별다른 작업 없이 파일에 저장할 수 있다. 터미널(콘솔)에서 다음과 같이 하면 된다. 출력을 리디렉션 한다. 모든 출력을 특정 파일에 쓰기(write) 커맨드 > 파일경로 ./client.exe > ./file.txt 모든 출력을 특정 파일에 추가하기(append) 커맨드 >> 파일경로 ./client.exe >> ./file.txt 참고 https://askubuntu.com/questions/420981/how-do-i-save-terminal-output-to-a-file https://linuxize.com/post/linux-tee-command/
-
C# Excel Application이 예외 발생 시 종료되지 않는 현상프로그래밍/의문 2019. 3. 31. 17:05
예외를 잡아주지 않으면 Excel이 꺼지지 않고 계속 떠있다. 다음은 예외를 의도적으로 발생시키고 그것을 finally로 종료한 코드이다. using System; using Excel = Microsoft.Office.Interop.Excel; class Program { static void Main(string[] args) { Excel.Application app = new Excel.Application(); try { app.DisplayAlerts = false; throw new ArgumentException("exception"); } finally { app.Workbooks.Close(); app.Quit(); } } } 프로세스 상태 finally 내부 코드가 실행되었는데도 백그..
-
boost/asio deprecated 1.69.0프로그래밍/c++ - boost::asio 2019. 3. 11. 04:44
boost::asio가 c++ 표준에 들어가게 되서 그런지 변경 사항들이 많다.호환성을 위해 더이상 더이상 사용되지 않는 코드들이 여전히 남아있지만,전처리기에 BOOST_ASIO_NO_DEPRECATED를 지정하면 더이상 사용되지 않는 코드들이 비활성화 된다. io_service가 io_context로 이름 변경io_context::dispatch가 dispatch 로 대체 됨io_context::post가 post 로 대체 됨io_context::strand::wrap이 bind_execuator 로 대체 됨io_context::get_io_context(), io_context::get_io_service()가 context() 함수로 이름 변경.io_context::strand::get_io_con..