TPL을 사용하여 큐에 대해 병렬로 처리하는 C# 프로세스가 있습니다. 각 레코드를 처리 한 후 처리 된 각 레코드 ID의 실제 레코드를 설정하여 프로세스가 실패하거나 중단되면 두 번째로 해당 레코드를 처리하지 않도록 할 수 있습니다. 레코드는 한 번만 처리해야합니다.처리 된 레코드 유지
레코드 ID를 간단한 텍스트 파일과 Sqlite 테이블에 직렬화하려고했습니다. 두 경우 모두 작은 레코드 ID (Guid 's)를 저장하는 시간은 레코드 자체의 전체 프로세스 시간의 50 %를 차지합니다. 나도 열고 Sqlite 연결을 사용하려고 시도하고 삽입을 할 parameritized 삽입 쿼리를 열거 나 데이터베이스 파일을 닫지 않아 그리고 더 나은 아니에요.
제 질문은, 내 프로세스가 죽으면 내게 그만 둔 곳에서 데리러 갈 수 있도록 영구적 인 방식으로 Guid (어쩌면 1000-2000) 목록을 어떻게 유지할 수 있습니까? ? 나는 서버가 재부팅되거나 프로세스가 종료되는 경우 빠른 속도로 아무 것도 시도하지 않고 계속 시도 할 것입니다.
아이디어가 있으십니까?
파일과 SqlLite에 쓰기 위해 동일한 시간이 소요될 수 없습니다. 코드를 공유 할 수 있습니까? 버퍼링 된 스트림을 사용하여 올바르게 작성하면 파일에 쓰기가 매우 빠릅니다. 또한, 당신은 그 자체로 TEXT 파일에 글을 쓸 필요가 없으며, 코드를 공유 할 수 있습니까? 또한, 내 로거는 초당 1-2,000 개의 CPU로 디스크에 (테스트 장치에서) 50,000 개의 메시지를 방출합니다. 디스크에 쓰기가 모든 SQL (심지어 SQLLite)보다 빠릅니다. –
SQL Server 사용 방법은 어떻습니까? – user1610015
내 첫 번째 시도는 추가를 위해 파일을 열고 하나의 행을 작성하고 닫는 것이지만 속도 저하는 해당 코드 블록에 대한 액세스를 기다리는 모든 스레드에서 발생했습니다. 나는 추가, 쓰기, 닫기 사이클에 대한 공개가 너무 느렸다 고 생각한다. 프로세스가 죽으면 버퍼가 플러시되는 것을 보장하는 더 빠른 방법이 있습니까? – powlette