Звучит как дубликат, но я не нашел никакого соответствующего решения. Я разрабатываю настольное приложение, где пользователи загружают файлы на сервер через HTTP. Приложение отлично работает, но оно использует слишком много памяти, так как я должен открыть файл FileStream
для его загрузки.Удалить поток файлов из памяти
Я пробовал звонить .Dispose()
и using (var fs = File.Open(path, mode)){}
, но, очевидно, он не освобождает память, просто удаляет объекты.
Я также попытался с:
GC.Collect();
GC.WaitForPendingFinalizers();
и работает, но я читал, что называют сборщик мусора не является хорошей практикой и может повлиять на производительность приложения. То, что я хочу сделать, просто.
- Я прочитал файл.
- Я загружаю файл.
- Я удаляю файл (из памяти).
Как я могу это сделать?
«но он использует слишком много памяти». Каковы ваши доказательства этого? Каковы симптомы? Вы просто отличаетесь от мнения ГК? – spender
Пользователи имеют ограничение на загрузку 512 Мб, поэтому я попытался загрузить большой файл, и когда я смотрю на диспетчер задач, используемая память увеличивается и остается такой (после процесса). Когда я использовал GC, это происходит так же, НО память уменьшается с 530 мб (весь размер файла + используемая память) до 20 мб, он работает, как я ожидаю, но я сомневаюсь, пользуюсь им или нет. – Neo
@neo. Вы доказали, что память будет освобождена, когда сбор мусора произойдет вызов 'GC.Collect()'. Итак, теперь вы знаете, что как только условия для сбора мусора будут выполнены, память будет освобождена (обратите внимание, что это происходит не очень часто и обычно только при низкой памяти). –