在重负载下在webapp上传输1个文件(内存管理)

时间:2014-01-28 03:27:17

标签: asp.net-mvc memory-management

我目前在我的网络应用程序中使用单个文件来拉取制表区域(拉链,拉特,长片等),并在调试时遇到潜在问题。

当我在我的网络应用程序中快速切换两个操作(都将此文本文件放入文件流)时,我得到了典型的"此文件正由另一个进程使用"错误。我更多地清理了我的代码并尽快处理了所述文件流,并且无法再重现此错误。

如果一个用户使用该网站,那很好,但如果我有潜在的数千人,我认为这是一个大问题。

我的问题是:如何确保在繁重的流量负载下不会发生这种情况?

我吐出了一些想法,无论他们听起来多么愚蠢或不切实际,我都会这样做。由于这些原因,我没有选择这些想法,这就是我在这里寻求建议的原因。

  • 拥有多个文本文件并在使用时移动到下一个
  • 为每个请求创建一份文件副本,并在完成工作后删除它
  • 将数据移至数据库

我已经尝试过数据库方法但发现将所有数据存入内存需要3-4秒,因为存在如此大量的数据。文件流只需不到一秒钟到第二个顶部。

2 个答案:

答案 0 :(得分:1)

如果您只是阅读文件,只需将FileShare.Read参数传递到FileStream构造函数即可轻松允许多个进程读取文件。

以下FileStream构造函数打开现有文件并授予对其他用户的只读访问权限(读取)。

FileStream fileStream = new FileStream(name, FileMode.Open, FileAccess.Read, FileShare.Read);

此枚举的典型用法是定义两个进程是否可以同时从同一文件读取。例如,如果打开文件并指定了“读取”,则其他用户可以打开文件进行读取,但不能写入。

http://msdn.microsoft.com/en-us/library/system.io.fileshare%28v=vs.110%29.aspx

答案 1 :(得分:0)

由于此数据听起来主要是对应用程序的所有用户都是只读的,因此您可以创建一个静态类来保存数据。这样,您只需要一次读取数据,它就可供应用程序的所有用户使用,直到应用程序池重置为止。使用静态类和构造函数,您应该能够进行单次读取,并且能够让任何用户访问数据。

public static class Tabulardata{

      private readonly object Data;        

      static TabularData(){
           Data = //read and process file data
      }
}