从内存中删除文件流

时间:2013-11-16 00:13:53

标签: c# memory-management filestream

听起来像是重复,但我找不到任何相关的解决方案,我正在开发一个桌面应用程序,用户通过HTTP将文件上传到服务器。该应用程序运行良好,但它使用了太多内存,因为我必须打开文件的FileStream才能上传它。

我尝试过调用.Dispose()using (var fs = File.Open(path, mode)){},但显然它不会释放内存,只删除对象。

我也尝试过:

GC.Collect();

GC.WaitForPendingFinalizers();

并且有效,但我已经读过那个调用垃圾收集器不是一个好习惯并且会影响应用程序性能。我想做的很简单。

  1. 我读了这个文件。
  2. 我上传文件。
  3. 我删除了文件(从内存中)。
  4. 我该怎么做?

1 个答案:

答案 0 :(得分:1)

确保Close() FileStream完成后使用它。

一种常见的方法是使用using而不是自己管理:

using(var input = File.Open(filename))
{
   // use input to read/upload/etc

} // input gets closed (via IDisposable.Dispose() here)

如果FileStream正确关闭,GC会自动从内存中清除文件的数据。

如果您的目标是减少内存使用量,则可能需要采用不同的方法。您可能希望以块(流结果)或类似内容的形式阅读和上传,而不是将整个文件读入内存并上传。