2010-06-09 4 views
1

나는 약 4 파일을 내가 그것이 manupalation에 대한 목록에 저장되어있는 파일에서 몇 가지 data.all이 데이터를 필요로 호출 할 때마다 열리는 방법이 필요합니다. 대략이 방법을 약 10,000 번 호출해야합니다. 프로그램이 매우 느립니다.코드 속도를 높이는 방법은 무엇입니까? 내 프로그램에서

더 나은 방법으로이 파일을 처리하는 방법은 목록 시간에 전체 데이터를 저장하는 대신 목록 대신 더 나은 대안을 사용하고 있습니까?

나는 약간의 코드를 줄 수는 있지만 이전의 질문은 큰 프로그램의 일부이며 이해하기 위해 완전히 설명해야하기 때문에 모든 사람들을 혼란스럽게했기 때문에 닫혔다. 그래서 어떤 코드도 제공하지 않는다. 생각하는 방법을 제안 해주세요. 일반적인 문제로이 ... 사전에

감사

+1

호출 할 때마다 전체 파일을 사용하는 방법이 있습니까? 예를 들어 대신 데이터베이스를 사용할 수 있습니까? 그렇다면 파일 내용을 SQLite 데이터베이스에 덤핑하고 SQL을 사용하여 각 호출에 필요한 데이터를 쿼리합니다. –

+0

파일의 크기는 얼마입니까? – tanascius

+0

예.이 파일을 호출 할 때마다 전체 파일을 사용하고 있습니다. 내 파일은 약 500kb입니다. – kaushik

답변

1

데이터베이스에 데이터를로드하고 데이터베이스에 인덱스를 추가하는 것이 좋습니다. 그러면 데이터에 대해 간단한 쿼리를 만드는 것이 매우 빠릅니다. 데이터베이스를 설정하는 데 많은 작업이 필요하지 않습니다. 별도의 프로세스가 필요없이 SQLite 데이터베이스를 만들 수 있으며 복잡한 설치 프로세스가 필요하지 않습니다.

2

열기, 닫기, 10,000 시간이 항상 느린 될 것입니다 파일을 읽는. 파일을 한 번 열어 목록에서 10,000 번 작업을 수행 한 다음 파일을 한 번 닫으시겠습니까?

+0

아무런 방법이 없습니다. 다른 파일을 열 때마다 ... – kaushik

3

일반적인 전략으로 정적이고 비교적 작은 경우이 데이터를 메모리 내 캐시에 보관하는 것이 가장 좋습니다. 그런 다음 10k 호출은 파일이 아니라 메모리 내 캐시를 읽습니다. 훨씬 더 빨리.

데이터를 수정하는 경우 SQLite 또는 임베디드 MS SQL Server와 같은 데이터베이스가 될 수 있습니다 (다른 데이터베이스도 있습니다).

무엇이 확실하지 않습니다 종류 데이터입니다. 간단한 설정/속성 데이터입니까? 때로는이 데이터의 로딩/조작/저장을 처리 할 라이브러리를 찾을 수 있으며 대개 내부 메모리 캐시가있어 하나 또는 두 개의 함수 만 호출하면됩니다.

파일에 대한 자세한 정보 (데이터의 크기와 크기)와 데이터 (형식 및 구조는 어떻게되어 있습니까?)가 더 이상 말하기 어렵습니다.

+0

약 400kb의 파일이 약 3200 개 있습니다 .for 각각의 호출 4이 파일을 사용하는 것입니다 .. 난 단지 file.i에 데이터를 manupalate하지 않습니다 파일 데이터를 사용합니다 them.it은 단지 5 단어를 가지고 각 라인의 속성 데이터입니다 .. – kaushik

+0

난 당신의 생각을 찾는다. 흥미로운, 캐시에 저장하는 방법? – kaushik

+0

글쎄, 당신의 데이터가 다음과 같을 것 같아요 : 'property 1 = word1 word2 word3 word4 word5'. 'property1'가'word1 word2 word3 word4 word5' 값에 대한 키인 해쉬 테이블을 생성 할 수 있습니다. 응용 프로그램이 시작되면 해시 테이블을 설정하고 데이터가 필요할 때마다 파일 대신 해시 테이블에 액세스하십시오. – FrustratedWithFormsDesigner

0

실행하려는 호출 메소드에서 파일에 대해 open을 호출하십시오. 메서드에 매개 변수로 데이터를 전달하십시오.

0

파일이 구성되어 있다면, 다소 구성 파일, ConfigParser 라이브러리를 사용하는 것이 좋을 것입니다. 그렇지 않으면 다른 구조 형식이있는 경우이 모든 데이터를 저장하는 것이 더 좋을 것이라고 생각합니다. JSON 또는 XML로 작성하고 데이터에 필요한 작업을 수행하십시오.

관련 문제