他の投稿を確認したところ、この問題を解決する方法が見つかりませんでした。System.OutOfMemory 1 MBのファイルを読み取るときに例外が発生する
public string Profile(string FileName,byte[] Search, uint align)
{
string Result = "";
Stream fs = File.OpenRead(FileName);
byte[] _Search = new byte[Search.Length];
uint check = 0;
byte Check_Zero;
for (uint i = 0; i < fs.Length; i++)
{
_Search = func.ReadBytes(FileName, i, _Search.Length);
if (func.ByteArrayCompare(_Search, Search))
{
check = i + align;
break;
}
}
for (uint i = 0; i < 50; i++)
{
Check_Zero = func.ReadByte(FileName, check);
if (Check_Zero == 0)
check++;
else
{
Result = func.ReadString(FileName, check);
break;
}
}
return Result;
}
私は2つの異なるファイルからの読み取りを試みています。私は9.52KBのファイルから読み込むときに問題はありませんが、1.00MBのファイルから読み込もうとすると、OutOfMemory例外が発生します。
ここでは、ReadBytes()が役立ちます。私が使用した関数
public static byte[] ReadBytes(string filename, uint address, int length)
{
var buff = new byte[length];
Stream fs = File.OpenRead(filename);
BinaryReader b = new BinaryReader(fs);
b.BaseStream.Seek(address, SeekOrigin.Begin);
b.Read(buff, 0, length);//This is where it breaks.
return buff;
}
好奇心を要しています - これはどのシステムで実行されていますか?スクリプト言語や何か古代、おそらく。 –
はじめに、なぜファイルを2つストリームで開きますか、そしてそれらを正しく処分するためにストリーム上で 'using()'ステートメントを持っていないのはなぜですか?ファイルを一度開いてから読み込み、ストリームを破棄します。 –
あなたは1Mbで、1Gbではないと確信していますか?検索のサイズを確認してください。 – Gusman