나는 15000x3000과 같은 큰 뚱뚱한 큰 이미지를 생성해야합니다. 이 이미지를 GDI +, 클래스 Bitmap으로 생성합니다.사용 가능한 인접 메모리 검색
물론 Bitmap을 인스턴스화 할 더 이상 메모리가 없기 때문에 때때로 생성이 실패합니다. 내 목표는 내 사용자에게 생성 할 수있는 이미지의 최대 크기를 알려주는 것입니다. 당신은 크기 15000x3000의 이미지를 생성하기 위해 노력
하지만 메모리가 부족 : 같은
메시지가 보일 것입니다. 최대 크기는 10000x3000 또는 15000x1000입니다. 메시지를 작성하는
생각은 같은 것입니다 :
public bool CanCreateBitmap(Size size, out string message)
{
long availableMemory = this.GetAvailableContiguousMemory();
long bytesRequiered = (long)size.Width * size.Height * 32;
if (availableMemory < bytesRequiered)
{
var sizeProposal1 = new Size(size.Width, (int)(availableMemory/(32 * size.Width)));
var sizeProposal2 = new Size((int)(availableMemory/(32 * size.Height)), size.Height);
message = string.Format("You tried to generate an image of size {0}, but there is not enough memory."
+ Environment.NewLine + "The maximum size available is {1}, or {2}."
, size, sizeProposal1, sizeProposal2);
return false;
}
else
{
message = "";
return true;
}
}
하지만 기능 GetAvailableContiguousMemory()
에 대한 코드를 필요가 없습니다.
.Net의 연속 메모리를 검색하는 방법이 있습니까?
내 목표를 달성하기 위해 올바른 질문을하고 있습니까?
아마도 비트 맵 생성 코드를 try/catch 블록에 넣고 메모리 부족 예외가 발생하면 처리 할 수 있습니까? – dandan78
그건 이미 생각이지만, 여기서 중요한 점은 사용자에게 뭔가를 제안하는 것입니다. 그들은 더 이상 정보가없는 "비트 맵을 만들 수 없습니다"라는 메시지 만 받도록 지루해합니다. –