110,502
社区成员
发帖
与我相关
我的任务
分享
private void button1_Click(object sender, EventArgs e)
{
var count = 0;
var smallBlocks = new List<byte[]>();
var smallBlockSize = 90000 ;
var largeBlockSize = 1 << 24;
for (int i = 0; i < 5000; i++)
{
var bt = new byte[90000];
smallBlocks.Add(bt);
}
while (true)
{
var bigBlock = new byte[0];
text tx = new text();
tx.tx(smallBlockSize, largeBlockSize, smallBlocks, bigBlock, count);
largeBlockSize++;
smallBlockSize++;
count++;
}
}
}
public class text
{
public void tx(int smallBlockSize, long largeBlockSize, List<byte[]> smallBlocks, byte[] bigBlock,int count)
{
try
{
bigBlock = new byte[largeBlockSize];
smallBlocks[(count % 5000)] = new byte[smallBlockSize];
GC.Collect();
}
catch
{ }
}
}
我按照我的程序和网上查的资料做了下测试,以上的代码在我的机子上运行了213077次循环出现System.OutOfMemoryException的报错,出现报错时内存仍显示有3.6个g可用,现在的问题是我不修改数组的大小,或者说把数组拆分会变得非常麻烦.