내가 대신 그것은에서 OutOfMemory 예외가 발생, Marshal.AllocHGlobal을 실험하고 있는데이 코드는 성공하지 않을 것이라고 수수께끼 발견 :왜 이것이 OutOfMemory를 던집니까?
namespace HAlloc
{
using System;
using System.IO;
using System.Runtime.InteropServices;
class Program
{
static void Main(string[] args)
{
// large file ~ 800MB
string fileName = @"largefile.bin";
FileInfo fileInfo = new FileInfo(fileName);
// allocation succeeds
IntPtr p = Marshal.AllocHGlobal((int)fileInfo.Length);
// OutOfMemory exception thrown here:
Marshal.Copy(File.ReadAllBytes(fileName), 0, p, (int)fileInfo.Length);
Marshal.FreeHGlobal(p);
}
}
}
왜 AllocHGlobal 호출이 성공하면 그것이에서 OutOfMemory을 얻을 것인가?
분할의 원인이되는 파일을 읽고는'Marshall.Copy'이 그것을하고있어 제외 또는'File.ReadAllBytes'을 던지고 있는지 확인해야한다. 나는 후자를 걸 겠어. – MusiGenesis
2MB ~ 800MB RAM이 없다는 것을 의미하지 않습니까? – Jasper