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