Microsoft MVP성태의 닷넷 이야기
글쓴 사람
초보 (jk424485 at gmail.com)
홈페이지
첨부 파일
 

주식 실시간 체결 정보를 내려받아서 처리하고 있는데요

종목이 예를 들어 100개라고 하면 각 종목에서 데이터가 들어오는데 어떤 종목은 초당 수십개가 들어오는 것도 있고 1초에 한개도 안들어오는 종목이 있죠

각 종목이 얼마나 빠른 속도로 데이터가 들어오는지.. 지금은 아래와 같은 방법을 쓰고 있습니다

 // shcode // 종목코드 변수

Stopwatch sw = new Stopwatch();
int cheCount;
long sw1;

Dictionary<string, List<DateTime>> ChegyulCountDic = new Dictionary<string, List<DateTime>>(); // Dictionary 하나 선언해주고

ChegyulCountDic.Add(shcode, new List<DateTime>()); // 종목을 등록합니다

그리고 데이터가 내려오면
sw.Start();
ChegyulCountDic[shcode].Add(DateTime.Now); // 종목별 리스트에 시간을 넣어줍니다

if ((DateTime.Now - DataClass.ChegyulCountDic[shcode][0]).TotalSeconds > 10) // 10초 동안에 얼마나 들어왔는지 체크하기위해 10 초가 지난 것은 삭제
    {
        DataClass.ChegyulCountDic[shcode].RemoveAt(0);
    }

if ((DateTime.Now - DataClass.ChegyulCountDic[shcode][0]).TotalSeconds > 10) // 두번 검사합니다.
    {
        DataClass.ChegyulCountDic[shcode].RemoveAt(0);
    }


그리고 남아있는 리스트 Count 로 건수를 구하고 있습니다

cheCount = ChegyulCountDic[shcode].Count;

sw.Stop();
sw1 = sw.ElapsedTicks;

이렇게 해서 Stopwatch 로 측정해보니 많이 걸릴 경우 한건 처리하는데 sw1 = 8ms까지도 나오네요

데이터가 많이 내려올경우 정확한건 없지만 초당 1000건도 내려올수가 있는데 하나에 8ms 가 걸리면 다 처리할 수가 없네요

초보라서 이런방식 밖에 생각이 나지 않습니다

Dictionary<string, int> dic = new Dictionary<string, int>();
dic[shcode]++; // 이렇게 건수를 증가 10초가 지나면 0으로 초기화하고 할려니 초기화 직후 건수를 읽으면 실제 속도와 차이가 안되더군요

이런 경우 어떤 해야 되는지 조언부탁드립니다










[최초 등록일: ]
[최종 수정일: 11/16/2021]


비밀번호

댓글 작성자
 



2021-11-17 09시43분
Dictionary<string, List<DateTime>>에서 List<DateTime>에 데이터가 많이 들어가나요? List의 구현은 연결 리스트가 아니라 배열이기 때문에 RemoveAt(0) 동작은 이후의 모든 데이터를 0번 인덱스로 Array.Copy 하는 식으로 동작합니다. 따라서 List에 데이터가 많다면 매번 RemoveAt 하는 것이 부담스러울 수 있습니다. 제 컴퓨터 기준으로 List에 천만 개 정도는 되어야 RemoveAt(0) 시에 9ms 정도 시간이 걸리는데... 그 정도 데이터를 List에 담고 있는 건가요?

일단, 단순히 10초당 건수를 재는 것이라면, int[60] 배열을 만들어 두고 각각의 버킷에 해당 초에 들어오는 데이터를 증가/초기화를 반복하는 식으로 처리하는 것이 좋을 듯합니다.
정성태
2021-11-17 06시01분
[초보] List에는 많으면 몇백개~ 천개 정도 들어가는데 뭔가 이상하네요
제시해주신 것도 시도해봐야겠습니다
감사합니다
[guest]

... 46  47  48  49  50  51  52  53  54  55  [56]  57  58  59  60  ...
NoWriterDateCnt.TitleFile(s)
1238(non...3/13/201412239(글쓴이의 요청으로 삭제합니다.) [2]
1237(non...3/11/201412362(글쓴이의 요청으로 삭제합니다.) [2]
1236(non...3/11/201413210(글쓴이의 요청으로 삭제합니다.) [2]
1235(non...3/10/201412351(글쓴이의 요청으로 삭제합니다.) [2]
1234(non...3/10/201414388(글쓴이의 요청으로 삭제합니다.) [3]
1233(non...3/9/201412512(글쓴이의 요청으로 삭제합니다.) [4]
1232(non...3/8/201411603(글쓴이의 요청으로 삭제합니다.) [2]
1231(non...3/7/201412948(글쓴이의 요청으로 삭제합니다.) [9]
1230POCO3/7/201413305쓰레드 안에서 DependencyProperty get, set시 또 다른 스레드 오류.. [1]
1229(non...3/6/201413013(글쓴이의 요청으로 삭제합니다.) [11]
1228POCO3/6/201411521안녕하세요. 질문이 있습니다. [1]
1226김형진3/4/201420221안녕하세요 windows azure에 관해 질문했던 사람입니다. [2]
1224(non...3/3/201416275(글쓴이의 요청으로 삭제합니다.) [11]
1223sadf...3/3/201411866아래 질문에 답변 감사드립니다. 한가지 더 궁금한점이 있어 질문드립니다. [1]
1222(non...3/2/201412687(글쓴이의 요청으로 삭제합니다.) [4]
1221(non...3/1/201412721(글쓴이의 요청으로 삭제합니다.) [2]
1220Until2/28/201411239질문드립니다. [1]
1219이성환2/28/201410898string.Join()과 Enumerable.Aggregate()의 차이가 궁금합니다. [2]파일 다운로드1
1218김형진2/25/201412355안녕하세요. window azure에 대해서 질문이 있어서 문의 드립니다 [4]
1217(non...2/23/201412805(글쓴이의 요청으로 삭제합니다.) [1]
1215아리수2/20/201416347C# 공부하면서 WPF에 대한 질문. [2]
1214조광훈2/20/201414583IIS8 응용프로그램 풀 관련 질문 드립니다. [2]파일 다운로드1
1213김태훈2/17/201411482가상화 프로그램 질문입니다. [1]파일 다운로드1
1212조광훈2/13/201410632ISAPI 필터에서 커스텀 헤더 정보 추가 [1]파일 다운로드1
1211조광훈2/12/201414100isapi 필터 로드 오류 [2]
1208박지호2/9/201417470[오타] 시작하세요 C# 프로그래밍 p.267 ~ 350 [1]
... 46  47  48  49  50  51  52  53  54  55  [56]  57  58  59  60  ...