C# 我的C程序使用了过多的内存(二进制读取器到缓冲区)

C# 我的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

我的程序使用了过多的内存。我试图读取程序的前512字节并将其存储在内存中。我认为它应该只使用512字节的内存,但出于某种原因,它使用的是1GB

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循环中只有一个对象。它是一个存储目录的字符串。定义设备的类是什么样子的。你能把它包括在你的问题中吗?哦,设备中有多少个项目?您可以在哪里看到仅枚举设备消耗了多少?