如何使CSV文件在内存中持久化以供网站使用
本文关键字:网站 持久化 CSV 何使 文件 内存 | 更新日期: 2023-09-27 18:29:52
我编写了一个ASP.NET 2.0网站,用作建议服务页面。每次有人在文本框中键入字母时,搜索到的文本都会异步发送到ASP.NET页面,并在CSV文件中进行搜索以获取数据(匹配建议)。
我正在使用File.ReadAllLines()方法将CSV文件读取到数组中以进行进一步处理。
这个页面运行得不错。然而,由于我们键入的每个字符都会命中此页面,因此服务的响应速度很慢。
有没有什么方法可以让CSV文件始终在内存中可用,这样每个请求就不需要读取CSV文件了?
CSV文件相当大,可以跨越100K多行。
任何建议都会对我有很大帮助。提前感谢
如果您将其存储在Session中,您只需要读取一次,但这将是每个HTTP会话。
如果不同的用户需要相同的文件,可以考虑使用几乎相同逻辑的Application。
如果你需要让它过期,请查看Cache,它对我来说有点困难——举个例子,但遵循相同的原则,但让你可以控制它何时过期。我链接到的MSDN文章有详细信息。
会话示例
会话设置(假设您将csv加载到字符串中):
Session["CSVContent"] = csv;
从会话读取:
var myCsv = (string)Session["CSVContent"];
例如
string myCsv;
if (Session["CSVContent"] == null)
{
// read csv here into a variable called csv then:
Session["CSVContent"] = csv;
myCsv = csv;
}
else
{
myCsv = (string)Session["CSVContent"];
}
// Process myCsv
应用程序示例
应用程序中的设置(假设您将csv加载到字符串中):
Application["CSVContent"] = csv;
从应用程序读取:
var myCsv = (string)Application["CSVContent"];
例如
string myCsv;
if (Application["CSVContent"] == null)
{
// read csv here into a variable called csv then:
Application["CSVContent"] = csv;
myCsv = csv;
}
else
{
myCsv = (string)Application["CSVContent"];
}
// Process myCsv