我目前在我的网络应用程序中使用单个文件来拉取制表区域(拉链,拉特,长片等),并在调试时遇到潜在问题。
当我在我的网络应用程序中快速切换两个操作(都将此文本文件放入文件流)时,我得到了典型的"此文件正由另一个进程使用"错误。我更多地清理了我的代码并尽快处理了所述文件流,并且无法再重现此错误。
如果一个用户使用该网站,那很好,但如果我有潜在的数千人,我认为这是一个大问题。
我的问题是:如何确保在繁重的流量负载下不会发生这种情况?
我吐出了一些想法,无论他们听起来多么愚蠢或不切实际,我都会这样做。由于这些原因,我没有选择这些想法,这就是我在这里寻求建议的原因。
我已经尝试过数据库方法但发现将所有数据存入内存需要3-4秒,因为存在如此大量的数据。文件流只需不到一秒钟到第二个顶部。
答案 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
}
}