c# List.RemoveRange 부하
이베스트투자증권의 api를 이용하여 코스피와 코스닥 합해 2,500개 정도 종목들의 체결 데이터와 호가 데이터를 수신하여 List에 담고 있다. 약간의 필터링을 하긴 하지만 그래도 그 양은 상당하다. 장이 끝날 무렵 1gb를 넘는다. 이렇게 수신하는 건 저장하기 위한 게 아니라 연산을 위한 것인데 대개의 경우 연산은 최근 한 시간 정도의 대이터를 대상으로 한다. 따라서 수 시간 전의 리스트…
이베스트투자증권의 api를 이용하여 코스피와 코스닥 합해 2,500개 정도 종목들의 체결 데이터와 호가 데이터를 수신하여 List에 담고 있다. 약간의 필터링을 하긴 하지만 그래도 그 양은 상당하다. 장이 끝날 무렵 1gb를 넘는다. 이렇게 수신하는 건 저장하기 위한 게 아니라 연산을 위한 것인데 대개의 경우 연산은 최근 한 시간 정도의 대이터를 대상으로 한다. 따라서 수 시간 전의 리스트…
모든 프로그래밍 언어들에서 List는 메모리의 연속된 공간을 차지하고 LinkedList는 그렇지 않다. 메모리의 연속된 공간을 차지한다는 건 그 크기가 늘어날 때 통째로 복사를 할 새로운 공간이 있어야 하고 그 자리에 내용 전체를 복사한다는 의미로 대충 생각해 봐도 부담스러운 작업이다. 그러나 이런 구조에서는 이터래이트와 랜덤 액세스가 무척 빠르다. 반대로 연속된 공간을 차지하지 않는 경우에는 각 아이템이 그…
DataGridView가 기본으로 설정되어 있는 상태에서는 칼럼의 헤더를 가운데로 얼라인해도 헤더 텍스트는 한가운데에 출력되지 않고 왼쪽으로 쏠려 나온다. 칼럼은 기본적으로 쏘트를 할 수 있게 설정되어 있다. 칼럼 헤더를 클릭하여 쏘트를 하게 되면 헤더의 오른쪽에 삼각형의 아이콘이 만들어지는데 이게 출력될 자리가 확보되어 있다. 따라서 칼럼 헤더를 한가운데에 나오게 하려면 쏘트 기능을 못 쓰게 설정해야 한다. 아래는 쏘트…
테이블 형태의 데이터를 이용해야 할 때 DataTable과 List 가운데 어느 걸 써야 할지 고민스러울 수 있다. 클래스를 만들어 List에 넣어 이용하는 거보다 DataTable을 쓰는 게 더 편하지만 느리다. 그렇다면 얼마나 느릴까? 아래는 인덱스를 안다는 전제 아래 인덱스로 액세스하여 데이터를 읽는 데 걸리는 시간들을 측정하는 예제다. 웜-업을 제외한 다섯 번씩의 평균은 DataTable이 859,208이고 List가 75,545로 열…
‘_’를 underscore라고 한다. 이 문자를 출력하려 한 때 드물게 이게 사라져서 보이지 않을 때가 있다. 문자열 처리를 틀리게 해서 그런가 코드를 암만 살펴봐도 답은 나오지 않는데 이 문제는 비주얼 컨트롤의 높이가 너무 좁아서 그런 거다. 언더스코어는 일반적인 문자들보다 아래에 그려진다. 그래야 문자와 겹치지 않고 문자 아래에 밑줄로 보이기 때문이다. 예를 들면 이렇다._ a 가언더스코어와 문자에…
.네트의 시간은 초 아래에 일곱 자리의 시간이 더 있는데 이걸 fractional second라 하며 hh:mm:ss.fffffff로 표기한다. millisecond는 1/1,000초이므로 적어도 논리적으로는 이거보다 더 정밀한 값이다. 그러나 사실적으로는 그렇게까지 정밀하게 작동하지는 않는다. TimeSpan을 출력할 때 이 fractional second가 문제될 수 있다. 아래는 TimeSpan을 출력하는 기본적인 예제다. 그런데 초까지만 출력해야 할 때도 있지만 아래의 예제는 작동하지 않는다. 아래와 같이…
DataTable에는 대개 많은 행들이 있는데 모든 행들이 늘상 필요한 건 아니다. 필요할 때마다 많은 행들 가운데 일부만 추려서 보든지 계산하든지 한다. 행을 검색하여 출력하기 아래는 DataTable에 시간과 정수를 채운 뒤 시간을 조건으로 하여 만족하는 행들만 보이게 하는 예제다. 이때 이용하는 게 DataTable.DefaultView 프라퍼티인데 이거는 customized view 즉 원래 DataTable의 내용은 바꾸지 않고 만들어진 껍데기에 불과하다….
컴퓨터 프로그래밍을 하다 보면 어느 순간 자연스럽지 않게 cpu나 메모리의 점유가 올라간 걸 느끼게 될 때가 있다. 보통은 최근에 추가하거나 수정한 부분을 의심하여 이 부분을 주석으로 처리한 뒤 앞뒤 상황들을 비교하며 수습한다. 그러나 이렇게 단순한 방법으로는 해결이 되지 않는 경우들도 많다. 이럴 때 가장 원초적이고 확실한 방법은 문제가 생길 수 있는 모든 부분에 카운트를 달아서…
데이터를 그리드나 리스트 형태로 출력해야 한다면 우선 DataGridView를 생각해 볼 수 있다. 그러나 이건 편하긴 하지만 느리고 데이터 바인드를 전제로 하기 때문에 직접 제어하는 경우 여러 문제들이 생긴다. 그 대표적인 예가 지나친 메모리 점유다. 그러나 엄격하게 지적하자면 DataGridView로 인해 생기는 여러 문제들은 이거를 적당하지 않은 용도로 이용해서 그런 게 아니라 애당초 이걸 잘못 만들어서 그런…