如何使CSV文件在内存中持久化以供网站使用

本文关键字:网站 持久化 CSV 何使 文件 内存 | 更新日期: 2023-09-27 18:29:52

我编写了一个ASP.NET 2.0网站,用作建议服务页面。每次有人在文本框中键入字母时,搜索到的文本都会异步发送到ASP.NET页面,并在CSV文件中进行搜索以获取数据(匹配建议)。

我正在使用File.ReadAllLines()方法将CSV文件读取到数组中以进行进一步处理。

这个页面运行得不错。然而,由于我们键入的每个字符都会命中此页面,因此服务的响应速度很慢。

有没有什么方法可以让CSV文件始终在内存中可用,这样每个请求就不需要读取CSV文件了?

CSV文件相当大,可以跨越100K多行。

任何建议都会对我有很大帮助。提前感谢

如何使CSV文件在内存中持久化以供网站使用

如果您将其存储在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