2009-05-16 4 views
0

기본적으로 Xdoc.Load (filename)을 수행하면 몇 가지 변경을 한 다음 Xdoc.Save (filename)는 삽입되거나 제거 된 요소 등이 변경된 것만 저장합니까 아니면 모든 것을 다시 저장합니까?XDocument.Save (string filename)가 전체 파일을 다시 저장하거나 변경 만합니까?

대답에 따라 내 앱이 변경 사항을 저장할지 아니면 명시 적 저장 및 종료시 저장할지 결정할 생각입니다. 또한 여러 xml 파일에 쓸지 또는 모든 것을 하나의 큰 파일에 보관할지 고려하십시오. 하나의 큰 파일이 얼마나 클지는 모르겠지만 잠재적으로 10 개의 MB가 될 수 있다고 생각합니다. 따라서 전체 파일을 다시 저장하는 경우 하나의 큰 파일을 유지하면서 모든 변경 사항을 저장할 수는 없습니다.

전체 파일을 저장하는 경우 누구나 각 엔터티 (잠재적으로 수백 가지)에 대해 별도의 XML 파일을 가지고 있거나 좋은 아이디어인지 여부에 대한 의견이 있습니까?

답변

7

전체 파일을 저장합니다. 이것이 텍스트 기반 형식의 본질입니다. 텍스트 파일은 변경되지 않은 부분을 다시 작성하지 않고 자체를 덮어 쓸 수 없습니다.

+0

추가 정보; 이것은 UTF8 (xml과 공통) 같은 가변 길이 인코딩의 두 가지 사실입니다. 즉, 손상 위험없이 단일 문자를 (튼튼하게) 바꿀 수 없다는 것을 의미합니다. –

2

예, 문서를 저장하면 전체 문서가 저장됩니다.

"변경 당"저장의 용도는 무엇입니까? 응용 프로그램이 충돌 할 경우를 대비해서입니까? 그렇다면 이러한 임시 변경 사항을 임시 디렉토리에 작은 파일로 저장하는 것이 좋습니다. 사용자가 명시 적으로 파일을 저장하라는 메시지가 표시되면 하나의 큰 파일로 저장하십시오. (복사하기가 더 쉽습니다.) 종료시 임시 디렉토리를 삭제하십시오.

정말 임시 디렉토리가 필요한지 궁금합니다. 거의 이익을 얻지 못하는 것 같습니다.

+0

변경 당 저장은 충돌, 정전, 기타 예외적 인 이벤트의 경우에 해당됩니다. 엄청난 문제는 아니지만 미션 크리티컬 한 것은 아니지만 손상되지 않은 파일/디스크를 제외한 사용자가 이전에 입력 한 데이터를 다시 입력해야하는 걱정을하지 않아도됩니다. 비록 백그라운드 스레드 만 저장하는 것으로 충분할지 궁금 하지만요. for-loop 생성 된 27MB의 XML을 저장하는 데 2 ​​초가 걸렸습니다. 너무 오래 걸리면 백그라운드에서 UI가 제대로 작동하지 않을 수 있습니다. 이는 예상되는 유스 케이스 데이터의 95 % 이상입니다. – Davy8

+0

Yup - 백그라운드 스레드에 저장하는 동안 UI의 데이터를 변경하지 않도록해야합니다. –