加载文本文件以便快速访问C#windows form app

时间:2012-04-19 13:33:52

标签: c# sql text

我在另一个stackoverflow上找不到答案,我会在这里问。我有一个大约有100000行的文本文件。我一直在做多个查询,比如这个

string header = isFirstRowHeader ? "Yes" : "No";
string pathOnly = Path.GetDirectoryName(path);
string fileName = Path.GetFileName(path);
string sql = @"SELECT Count(*) as NumberofRecords FROM [" + fileName + "]";

using (OleDbConnection connection = new OleDbConnection(
       @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly +
       ";Extended Properties=\"Text;HDR=" + header + "\""))
using (OleDbCommand command = new OleDbCommand(sql, connection))
using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
{
    DataTable dt = new DataTable();
    dt.Locale = CultureInfo.CurrentCulture;
    adapter.Fill(dt);
    return dt;
}

它正在做多个版本。有没有办法加载文本文件,以便我可以更快地运行这样的事情?有没有更好的办法?目前花了太长时间。

3 个答案:

答案 0 :(得分:2)

你想做什么?

从您的示例中看起来您要做的唯一事情就是获取文件中的记录数。

如果您没有跨越多行的内容,您可以安全地计算行数(标题的-1行)。

* if,且仅当

修改

因此,计算行数并不是一种选择,因为你正在做更复杂的事情。

我刚刚生成了一个包含100k记录(大小为7.7 MB)的样本文件,该文件在0.43秒内得到处理。做count(*) .. group by Name需要0.58秒。

你的号码是多少,为什么你认为它需要太长时间?档案在哪里?它可能是网络/慢速驱动器问题吗?

答案 1 :(得分:0)

使用流将文件加载到内存中,请参阅here。一旦它在内存中,运行您的查询等。

答案 2 :(得分:-1)

您可以使用以下示例:

string filename = @"C:\BigTextFile.txt";  
StreamReader sr = System.IO.File.OpenText(filename);

// Process line by line.  
string line = "";  
do  
{  
line = sr.ReadLine();  
}  
while(sr.Peek() != -1);  

// Load all at once and process.  
string alltext = sr.ReadToEnd();  

sr.Close();