Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 文件在Web应用程序上重载处理1个文件(内存管理)_Asp.net Mvc_Memory Management - Fatal编程技术网

Asp.net mvc 文件在Web应用程序上重载处理1个文件(内存管理)

Asp.net mvc 文件在Web应用程序上重载处理1个文件(内存管理),asp.net-mvc,memory-management,Asp.net Mvc,Memory Management,我目前在我的web应用程序中使用一个文件来拉列表区域(ZIP、LAT、LONG等),在调试时遇到了一个潜在的问题 当我在web应用程序中的两个操作之间快速切换时(都将此文本文件带入文件流),我遇到了典型的“此文件正被另一个进程使用”错误。我进一步清理了我的代码,并尽快处理了这些文件流,不能再重现这个错误了 如果有一个用户在使用这个网站,那也没关系,但是如果我有潜在的数千名用户,我认为这是一个大问题 我的问题是:如何确保在交通繁忙的情况下不会发生这种情况? 我在吐出我的想法,不管它们听起来多么愚蠢

我目前在我的web应用程序中使用一个文件来拉列表区域(ZIP、LAT、LONG等),在调试时遇到了一个潜在的问题

当我在web应用程序中的两个操作之间快速切换时(都将此文本文件带入文件流),我遇到了典型的“此文件正被另一个进程使用”错误。我进一步清理了我的代码,并尽快处理了这些文件流,不能再重现这个错误了

如果有一个用户在使用这个网站,那也没关系,但是如果我有潜在的数千名用户,我认为这是一个大问题

我的问题是:如何确保在交通繁忙的情况下不会发生这种情况?

我在吐出我的想法,不管它们听起来多么愚蠢或不切实际。出于这些原因,我没有选择接受这些想法,这就是为什么我在这里寻求建议

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

我尝试过DB方法,但发现将所有数据放入内存需要3-4秒,因为数据量太大了。一个文件流最多只需要不到一秒到一秒的时间。

如果您正在读取一个文件,只需将
FileShare.Read
参数传递到
FileStream
构造函数中,就可以轻松地允许多个进程读取该文件

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

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


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

public static class Tabulardata{

      private readonly object Data;        

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

为什么不创建一个包含此文件内容的静态类,这样您只需读入一次。那么,只要应用程序池不重置,这个类就可以供所有人使用?@Tommy我在另外两个文件上也有这个功能,我经常使用,但有些人怎么从来没有想过要将它应用到制表区域,先生,刚刚为我节省了大量的处理时间:)哈哈-我讨厌在我的项目中这样做。如果你觉得这篇评论能更好地回答你的问题,我可以把它作为一个答案贴出来;然而,这肯定是处理我的特定场景最有效的方法。如果你愿意,就去回答吧!
public static class Tabulardata{

      private readonly object Data;        

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