Потоки.NET сохраняют память?

Предполагая, что приложение определено в отдельном файле (для тех, кто может искать этот вопрос), измените

`withStyles(styles)(Recipe);`

на

export default withStyles(styles)(Recipe);

, как Райан уже объяснил 'с помощью Стилей является компонентом высшего порядка, который создает и возвращает новый компонент '

5
задан Jader Dias 26 February 2009 в 19:03
поделиться

4 ответа

Если Вы передадите свое копирование потоком, т.е. считаете буфер, запишите буфер, считайте буфер, запишите буфер и т.д., пока у Вас не закончились данные, то только потребуется столько же памяти сколько размер буфера. Я ожидаю Файл. Копия, чтобы сделать это (в собственном коде Windows, по общему признанию).

Если Вы хотите сделать это сами, используйте что-то вроде этого:

public void CopyData(Stream input, Stream output)
{
    byte[] buffer = new byte[32 * 1024];
    int read;
    while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
    {
        output.Write(buffer, 0, read);
    }
}

Это только возьмет 32K, однако большой, поток.

Править: Как отмечено в комментариях, потоки могут иметь свои собственные буферы также, но дело в том, что Вы могли все еще передать очень большой файл, не заканчиваясь память.

13
ответ дан 18 December 2019 в 08:31
поделиться

Нет, целый файл не будет загружен в память.

Объем потребляемой памяти будет зависеть от размера буферов, которые Вы используете для чтения и записи и любых внутренних буферов, сохраняемых потоком.

Класс FileStream использует внутренний буфер, размер которого может быть указан в перегрузке конструктора и какие значения по умолчанию к 0x1000 байтам (вероятно, зависящий от реализации - это значение было получено путем исследования класса FileStream с помощью Отражателя Лутца).

2
ответ дан 18 December 2019 в 08:31
поделиться

Если Вы называете что-то как ReadToEnd() затем да, содержание файла будет загружено в память. Вы корректны в предположении, что использование буфера является соответствующим подходом, чтобы гарантировать, что только подмножество данных файла загружается в память в любой момент времени.

3
ответ дан 18 December 2019 в 08:31
поделиться

Это действительно зависит от Вашей методологии. Если Вы используете поток в качестве временной конечной точки с ReadToEnd(), можно загрузить весь файл в памяти. Если вместо этого, Вы буферизуете, то Вы не будете использовать больше, чем немного служебное по размеру буфера.

1
ответ дан 18 December 2019 в 08:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: