내 프로젝트의 경우 파일에서 UInt16, UInt32, Bytes 및 String을 작성해야합니다. 나는 다음과 같이 썼다 간단한 클래스로 시작 : 나는 비록 기존 BinaryReader를를 사용하는 것이 더 될 줄 알았는데 그래서 나는 그것을 시도C# BinaryReader가 특히 느립니다. 대체?
public FileReader(string path) //constructor
{
if (!System.IO.File.Exists(path))
throw new Exception("FileReader::File not found.");
m_byteFile = System.IO.File.ReadAllBytes(path);
m_readPos = 0;
}
public UInt16 getU16() // basic function for reading
{
if (m_readPos + 1 >= m_byteFile.Length)
return 0;
UInt16 ret = (UInt16)((m_byteFile[m_readPos + 0])
+ (m_byteFile[m_readPos + 1] << 8));
m_readPos += 2;
return ret;
}
,하지만 난 내 방식보다 느린 것으로 나타났습니다. 누군가가 왜 이것이지 설명 할 수 있고 파일을로드하고 읽는 데 사용할 수있는 다른 기존 클래스가 있다면?
~ Adura
테스트를 어떻게하셨습니까? 중요한 것은 BinaryReader에서 데이터가 조금씩 읽히기 때문에 모든 데이터를 읽는 데 걸리는 시간을 코드에 포함 시켰습니까? 또한, 빠른 속도로이 코드가 필요합니까? –
속도 : 바이너리 파일에서 이미지를 읽었으며 "이미지 뷰어"에서 브라우징 할 때 모든 이미지를 보여주는 데 차이가 있다는 것을 느낄 수있었습니다. BinaryReader의 개체를 작성하거나 파일을 읽는 데 걸리는 시간은 두 경우 모두 기본적으로 즉시이므로 무시할 수 있습니다. 새 이미지를 선택할 때마다 최대 4000 바이트를 읽었으므로 속도가 빨라야합니다. 내가 생각하기에 메모리 스트림 솔루션이 이상적이다. – Adura
요점은 BinaryReader *를 만들면 파일을 읽지 못한다는 것입니다. 필자는 File.ReadAllBytes가 "기본적으로 즉시"라는 것을 매우 의심합니다. MemoryStream을 사용하여 수행 한 작업은 모두 프런트로드 작업입니다. 나는 당신이 퍼포먼스를 측정하고있는 것을보고 관심을 가질 것입니다. –