Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为快速访问C#windows窗体应用加载文本文件_C#_Sql_Text - Fatal编程技术网

为快速访问C#windows窗体应用加载文本文件

为快速访问C#windows窗体应用加载文本文件,c#,sql,text,C#,Sql,Text,另一方面我找不到答案,我会在这里问。我有一个大约100000行的文本文件。我已经对它做了多次类似这样的查询 string header = isFirstRowHeader ? "Yes" : "No"; string pathOnly = Path.GetDirectoryName(path); string fileName = Path.GetFileName(path); string sql = @"SELECT Count(*) as NumberofRecords FROM ["

另一方面我找不到答案,我会在这里问。我有一个大约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;
}

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

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

您可以使用以下示例:

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();

你想干什么

从您的示例来看,似乎您要做的唯一一件事就是获取文件中的记录数

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

*当且仅当

编辑:

因此,计算行数不是一个选项,因为你正在做更复杂的事情

我刚刚生成了一个包含100k条记录(7.7MB大小)的示例文件,该文件在0.43秒内得到处理。正在进行<代码>计数(*)。。按名称分组花了0.58秒


你的数字是多少?为什么你认为这花费的时间太长?档案在哪里?这可能是网络/硬盘速度慢的问题吗?

对于小文件来说是个不错的选择,但我认为对于将如此大的文件(100000行)加载到内存中来说,这不是个好选择。好吧,每一行可能有24个字节*100000,所以您的顺序是兆字节。你可能有几GB的内存,所以你真的没有什么可担心的。你想说服OleDbConnection如何使用你的内存流?这样就不需要像访问文件那样的活动了directly@ldgorman:请告诉我如何在内存中的blob上“运行查询”。因此,您有一个长字符串,什么next@Jodrell:您只有最后一行,所有文本都应为空:)为什么投票被否决?代码显示了两种方法,即逐行读取或同时读取所有数据。您是否进行了足够的查询来证明优化此方法的合理性?如果是这样的话,你可以把整个东西都放到一个
数据表或内存中的数据库中,然后对它运行一次查询。那么,你能发布一个更复杂的样本以及它所需要的时间吗?还有一些更复杂的事情,比如计算名字和姓氏的组合,我刚刚发布了最简单的一个。