-1

我有一个包含 21000 行的文本文件,我有一个属性,我需要在 .txt 文件中搜索它,并且也需要从该属性中返回一个值。所有代码都已完成并尝试了异步加新线程,但在按钮单击期间有 5 秒的延迟。我怎样才能消除滞后。

尝试了新的统一和 C#

public async void read()
{
    string[] lines = await ReadAllLinesAsync("Assets/Blockchain Module/" + File + ".csv");
    fields = null;

    for (int j = 0; j < lines.Length; j++)
    {
        fields = lines[j].Split(',');
        x[j] = System.Convert.ToDouble(fields[1]);
        y[j] = System.Convert.ToDouble(fields[2]);
        z[j] = System.Convert.ToDouble(fields[3]);
        temp[j] = System.Convert.ToDouble(fields[4]);
    }
}

public void Start()
{
    Thread thread = new Thread(read);
    thread.Start();

    //gradient.Evaluate()
    //var main = particleSystem.main;
    //main.maxParticles = 200;
}

private const FileOptions DefaultOptions = FileOptions.Asynchronous | FileOptions.SequentialScan;

public static Task<string[]> ReadAllLinesAsync(string path) => ReadAllLinesAsync(path, Encoding.UTF8);

public static async Task<string[]> ReadAllLinesAsync(string path, Encoding encoding)
{
    var lines = new List<string>();

    // Open the FileStream with the same FileMode, FileAccess
    // and FileShare as a call to File.OpenText would've done.
    using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, DefaultBufferSize, DefaultOptions))
    using (var reader = new StreamReader(stream, encoding))
    {
        string line;
        while ((line = await reader.ReadLineAsync()) != null)
        {
            lines.Add(line);
        }
    }

    return lines.ToArray();
}
4

2 回答 2

2

一般来说,如果您的搜索是基于行的,最好逐行读取而不是读取所有文件:

using (StreamReader reader = new StreamReader("filename"))
{
    while (true)
    {
        string line = await reader.ReadLineAsync();
        if (line == null)
        {
             break;
        }
        //logic here...
    }
}
于 2019-08-26T13:09:00.797 回答
2

在您的系统上读取和解析文件显然需要 5 秒。我不认为逐行阅读是最快的方法,但无论如何,不​​要为每个请求解析文件。

在应用程序启动时读取一次,并将其缓存在适当的数据类型中。

于 2019-08-26T13:10:23.103 回答