C# 我的C程序使用了过多的内存(二进制读取器到缓冲区)
我的程序使用了过多的内存。我试图读取程序的前512字节并将其存储在内存中。我认为它应该只使用512字节的内存,但出于某种原因,它使用的是1GBC# 我的C程序使用了过多的内存(二进制读取器到缓冲区),c#,arrays,file,io,filestream,C#,Arrays,File,Io,Filestream,我的程序使用了过多的内存。我试图读取程序的前512字节并将其存储在内存中。我认为它应该只使用512字节的内存,但出于某种原因,它使用的是1GB BinaryReader reader; byte[] buffer = new byte[0]; foreach (IStorageDevice device in Devices) { reader = new BinaryReader(File.Open(device.Location, FileMode.Open)); buff
BinaryReader reader;
byte[] buffer = new byte[0];
foreach (IStorageDevice device in Devices)
{
reader = new BinaryReader(File.Open(device.Location, FileMode.Open));
buffer = reader.ReadBytes(512);
reader.Close();
reader.Dispose();
}
我做的测试中只有一个StorageDevice,所以它只加载一个文件
我似乎找不到它占用这么多内存的原因。任何帮助都将不胜感激
设备是IStorageDevices的列表。存储设备只是一个带有字符串对象的类,该对象是指向文件的路径,该文件在我的桌面上是一个.bin文件时被读取
public class ROM : IStorageDevice
{
public string Location { get; set; }
public ROM(string Location)
{
this.Location = Location;
}
}
你需要处置你的资源。这就是使用的作用。当使用块退出时,流将被释放 试着这样做:
byte[] buffer = new byte[512];
foreach (IStorageDevice device in Devices)
{
using (var stream = File.OpenRead(device.Location))
{
// Read 512 bytes into buffer if possible.
var readCount = stream.Read(buffer, 0, 512);
StoreData(buffer, readCount); // A method you write to store the data
}
}
你从未关闭过文件处理程序?我确实关闭了文件。什么时候?二进制读取器是一次性的,但你永远不会忘记把它复制到问题中,但它在我的程序中。我现在就编辑它。是什么让你认为这会导致1GB的读取?Open是一个流;它不会加载整个文件-因此,即使您确实忘记处理它,它也不会做什么,除了锁定文件;再说一遍:是什么让你认为这是原因呢?这将我的内存使用量减少了一半,现在它使用了大约583MB。注释掉整个using语句,看看它有什么作用。这个foreach循环消耗内存吗?目前,foreach循环中只有一个对象。它是一个存储目录的字符串。定义设备的类是什么样子的。你能把它包括在你的问题中吗?哦,设备中有多少个项目?您可以在哪里看到仅枚举设备消耗了多少?