문제

내 응용 프로그램 (C# 3.5)에는 단일 XML 파일 (읽기 및 쓰기)에 매우 자주 액세스하는 다양한 프로세스가 있습니다. 파일에 액세스하는 코드는 상당히 다른 응용 프로그램에서 참조 된 어셈블리에 배치됩니다. 예를 들어 Windows 서비스는 MyFilereAderWriter 클래스 (이전에 언급 된 어셈블리에서 위치)를 주입 하고이 클래스의 읽기/쓰기 방법을 사용할 수 있습니다.

최소한의 잠금으로 파일을 읽고 만들/추가하는 가장/가장 빠른 방법을 찾고 있습니다. 파일 데이터를 캐싱하고 새 컨텐츠를 정기적으로 플러시하는 것은 데이터가 중요하기 때문에 옵션이 아닙니다.

현재 파일에 컨텐츠를 읽고 쓰기 위해 현재 XDocument (LINQ2XML 인프라)를 사용하고 있음을 언급하는 것을 잊었습니다.

도움이 되었습니까?

해결책

우선 XML 문서에 대한 모든 액세스가 단일 인스턴스를 통해 수행되는지 확인하십시오.

그런 다음 액세스하는 기능의 시작 부분에 잠금 장치 (잠금 해제 대기)를 넣고 끝에 잠금을 해제하십시오.

다른 팁

글을 쓰면 문서에만 추가된다면 시도해보십시오.

http://msdn.microsoft.com/en-us/library/aa302289.aspx

기본적으로 귀하의 XML 문서는 시작 및 엔드 태그가있는 쉘입니다. 태그 사이에는 다른 파일을 참조하는 참조가 포함되어 있으며이 다른 파일은 XML 문서의 본문입니다. 쓰기 작업의 경우 XML 파일을 작성할 때마다로드 할 필요가 없으며 매번 전체 파일을 작성하지 않기 때문에 여러 번 더 빠릅니다.

XMLWriter 클래스를 사용하면 신체 파일 끝에 노드를 쉽게 추가 할 수 있습니다.

다른 사람들이 XML을 읽고 싶을 때, 그들은 단순히 문서를 열고, XML 파서는 "알고있다"는 두 파일을로드하고 구문 분석합니다.

도움이 되었기를 바랍니다.

데이터가 중요하다는 것은 무엇을 의미합니까? XML 파일이 응용 프로그램에서 독점적으로 사용하지 않습니까?

파일에 IO 액세스를 잠그는 간단한 (그리고 아마도 충분히 좋은) 방법은 각 I/O 작업이 잠금 해야하는 "읽기 쓰기 토큰"객체를 제공하는 정적 팩토리 클래스를 만드는 것입니다.

public static object GetReadWriteToken(String fileName)
{
    //use a hashtable to retreive an object, with filename as key
    return token;
}

그리고 읽고 쓰는 동안 단순히 이것을하십시오.

lock(GetReadWriteToken(@"C:\important.xml"))
{
    //io code
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top