4

"Application Virtualization"제품을 만들고 있습니다. XML 파일을 가상 레지스트리로 사용합니다. 내 소프트웨어에서 생성 된 가상 응용 프로그램은 가상 레지스트리 Xml에 액세스합니다. 실행되지만 매우 느리게 실행됩니다.가상 레지스트리로 XML을 적용하면 응용 프로그램이 느려집니다.

부모로부터 스레드 된 여러 프로세스가 동일한 레지스트리 파일에 액세스하기 때문에 모든 레지스트리 API 호출에서 XML을로드하고 언로드합니다. 이로 인해 응용 프로그램이 느리게 실행될 수 있습니다. 어느 날 XML에 대한 대안을 알릴 수

...

+3

왜 모든 레지스트리 API 호출에서로드하겠습니까? 평균 응용 프로그램은 아마도 레지스트리에 17 억 통화를합니다. 이 접근법은 매우 느릴 것입니다. 시작시 한 번만로드 한 다음 리더 - 라이터 잠금 장치로 액세스를 동기화하십시오. – Luke

+0

처음에는 메모리에 한 번로드하고 액세스 한 다음 쓰고 응용 프로그램을 닫으면 보조 메모리에 다시 저장합니다. 많은 응용 프로그램을 여러 프로세스를 만들고 레지스트리에 동시에 액세스하려고합니다. 일단 다중 프로세스에 관해서, 첫 번째 프로세스의 주 메모리에로드 된 레지스트리는 범위를 벗어나 다른 프로세스와 동기화되지 않습니다. 우리는 프로세스간에 공통의 메모리를 가져야합니다. –

+1

만약 내가 그런 식으로하면 진짜 (임베디드?) DB를 사용할 수 있습니다 ... XML은 속도를 고려하지 않습니다. –

답변

0

텍스트가 트리로 변환되는 시간입니다. 프로세스 내에서 쓰기가 발생한 후에 만 ​​모든 프로세스에서 XML을 Loadaing 및 Parsing하여이 코드를 관리했습니다.

0

당신이 메모리에로드하고 거기에서 그것을 조작하는 경우는 다음 문제는 XML이 아니다. 응용 프로그램의 프로필을 작성하여 대부분의 시간을 보내고 있는지 확인하십시오. 아마 당신은 접근하려는 항목을 검색하는 데 대부분의 시간을 보내고있는 것을 알게 될 것입니다.

+0

프로세스 간 통신 및 단일 레지스트리 파일과의 프로세스 동기화로 인해 메모리에로드되지 않습니다. –

1

대신 데이터베이스를 사용할 수 있습니다. 더 빠를 것입니다. Sqlite는 가볍고 강력합니다.

+0

이 친구를 확인할 것입니다. –

0

글쎄, 당신은 물론 항상 유지, 당신은 가상 XML 레지스트리를 관리하는 별도의 프로세스를 생성해야 할 것이다, 그렇지 않으면 스레드 안전하고 빠른 실제 레지스트리, ...

를 사용할 수 있습니다 메모리의 XML 구조이므로 항상 읽고 쓸 필요가 없습니다. 그런 다음 액세스해야하는 프로세스는 IPC를 사용하여 레지스트리 프로세스와 통신 할 수 있습니다.

여러 가지 프로세스가 레지스트리를 항상 업데이트 할 가능성이없는 경우 : 가상 XML 레지스트리를 메모리에 유지하고 변경할 때 디스크에 기록하지만 백그라운드 스레드를 통해 비동기 적으로 디스크에 기록하십시오. 레지스트리에 액세스 할 때 먼저 파일이 변경되었는지 확인하십시오. 그렇지 않은 경우 다시로드 할 필요가 없습니다.