我目前正在使用 public MyPanel(boolean[][] newGrid) {
grid = newGrid;
//Represents an image with 8-bit RGBA color components packed into integer pixels.
image = new BufferedImage(1000, 1000, BufferedImage.TYPE_INT_ARGB);
imageG = image.createGraphics();
//Set the single pixel line color to YELLOW using BufferedImage instance
imageG.setColor(Color.YELLOW);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Integer cellWidth = this.getWidth() / grid.length;
Graphics2D tempg = (Graphics2D) g;
//Set the blocks and rest of it part to color RED
tempg.setColor(Color.RED);
for (Integer i = 0; i < grid.length + 1; i++) {
imageG.drawLine(i * cellWidth, 0, i * cellWidth, this.getHeight());
}
tempg.fillRect(0, 0, this.getWidth(), this.getHeight());
//Draw BufferedImage
tempg.drawImage(image, 0, 0, this);
//this.getGraphics().drawImage(lineImage, 0, 0, this);
}
/ HttpWebRequest
来读取根据可用内存和同时下载次数确定的长度字节数组,然后使用WebResponse
来把它写到文件中
鉴于即使大型阵列超出范围,也不会从内存中清除 - 可能在相当长的时间内,我希望将数据直接转移到FileStream
以完全消除对字节数组的需要。
当然,另一种选择是手动拨打FileStream
,但我确信人们会同意这不是最好的想法。
我的参考代码:
GC.Collect()
另外,在 private void Worker_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker bW = sender as BackgroundWorker;
Req = (HttpWebRequest)WebRequest.Create(FileSource);
Req.AddRange(BRead, ByteTotal); //This is why I'm using httpwebrequest
using (WebResponse resp = Req.GetResponse())
using (Stream respStream = resp.GetResponseStream())
{
RunDL(bW, resp, respStream, e);
}
}
private void RunDL(BackgroundWorker bW, WebResponse resp, Stream respStream, DoWorkEventArgs e)
{
byte[] Buffer = new byte[ChunkSize];
CurChunkSpace = 0;
while (BRead < ByteTotal)
{
if (bW.CancellationPending)
{
e.Cancel = true;
break;
}
int temp = CurChunkSpace;
if (BRead + (Buffer.Length - CurChunkSpace) > ByteTotal)
{
CurChunkSpace += respStream.Read(Buffer, CurChunkSpace, ByteTotal - BRead);
}
else
{
CurChunkSpace += respStream.Read(Buffer, CurChunkSpace, Buffer.Length - CurChunkSpace);
}
temp = CurChunkSpace - temp;
BRead += temp;
bW.ReportProgress(BRead);
if (bW.CancellationPending)
{
if (KeepFile)
{
using (FileStream FS = new FileStream(FilePath, FileMode.Append))
{
FS.Write(Buffer, 0, BRead - BWritten);
BWritten = BRead;
}
}
e.Cancel = true;
break;
}
if (CurChunkSpace == Buffer.Length)
{
using (FileStream FS = new FileStream(FilePath, FileMode.Append))
{
FS.Write(Buffer, 0, Buffer.Length);
BWritten += Buffer.Length;
CurChunkSpace = 0;
}
if (ChunkChangePending)
{
ChunkChangePending = false;
Buffer = new byte[ChunkSize];
}
}
}
if(BWritten != BRead)
{
using (FileStream FS = new FileStream(FilePath, FileMode.Append))
{
if (TotalChunks == 1)
{
FS.Write(Buffer, BWritten, Buffer.Length);
BWritten += Buffer.Length - BWritten;
} else
{
FS.Write(Buffer, 0, CurChunkSpace);
BWritten += CurChunkSpace;
}
}
}
Array.Clear(Buffer, 0, Buffer.Length);
}
语句(FileStream
)中包含using
会更有效吗?