XML 파일 (old.xml)을 열고 잘못된 문자를 필터링하고 다른 XML 파일 (abc.xml)에 작성하는 코드입니다. 마지막으로 XML (abc.xml)을 다시로드합니다. followling 라인을 실행할 때, 예외, xml 파일이 다른 프로세스에 의해 사용이 말한다되어내 코드에서 누수가 어디 있습니까?
xDoc.Load("C:\\abc.xml");
사람이 무슨 어떤 생각을 가지고 있습니까? 내 코드의 누수와 왜 (항상 "사용"키워드를 사용하여 누수가 있는지 혼란 스럽습니다 ...)?
여기 내 모든 코드가 있는데, Windows Vista x64에서 C# + VSTS 2008을 사용하고 있습니다.
// Create an instance of StreamReader to read from a file.
// The using statement also closes the StreamReader.
Encoding encoding = Encoding.GetEncoding("utf-8", new EncoderReplacementFallback(String.Empty), new DecoderReplacementFallback(String.Empty));
using (TextWriter writer = new StreamWriter(new FileStream("C:\\abc.xml", FileMode.Create), Encoding.UTF8))
{
using (StreamReader sr = new StreamReader(
"C:\\old.xml",
encoding
))
{
int bufferSize = 10 * 1024 * 1024; //could be anything
char[] buffer = new char[bufferSize];
// Read from the file until the end of the file is reached.
int actualsize = sr.Read(buffer, 0, bufferSize);
writer.Write(buffer, 0, actualsize);
while (actualsize > 0)
{
actualsize = sr.Read(buffer, 0, bufferSize);
writer.Write(buffer, 0, actualsize);
}
}
}
try
{
XmlDocument xDoc = new XmlDocument();
xDoc.Load("C:\\abc.xml");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
EDIT1 : 버퍼 크기를 10M에서 1M으로 변경하려고 시도했습니다. 나는 너무 혼란 스럽다. 어떤 생각?
EDIT2 : 입력 된 XML 파일이 100M 또는 그와 같이 매우 큰 경우이 문제가 재현하기가 쉽습니다. .Net 알려진 버그인지 여부를 의심하고 있습니다. ProcessExplorer/ProcessMonitor와 같은 도구를 사용하여 XmlDocument.Load가 액세스하지 못하도록 파일을 잠그는 프로세스를 확인합니다.
큰 버퍼가 필요한 이유는 무엇입니까? (문제와 관련해서는 안되지만, 왜 10MB인지를 아는 것은 흥미로울 것입니다 ...). 나는 아마도 10k를 사용할지도 모른다 ... –
나는 10M에서 1M까지 버퍼의 크기를 변경하려고 노력했다. 나는 너무 혼란 스럽다. 어떤 생각? – George2
원래의 코드에서 큰 버퍼 크기를 사용하는 것은 순전히 목적을 테스트하는 것입니다. 즉, 임의로 설정 한 것이 아닌 임시 값입니다. – George2