【问题标题】:How to load large files in C# Windows app [closed]如何在 C# Windows 应用程序中加载大文件 [关闭]
【发布时间】:2017-01-09 18:19:35
【问题描述】:

我正在尝试创建一个 Windows 应用程序,该应用程序将加载多个大约 30MB 的大型日志文件。

这里最好的方法是什么,因为我尝试使用 RichTextBox 控件加载它,但这会在显示文件之前长时间阻止客户端。

我已尝试使用此代码加载日志文件

 textBox1.Text = File.ReadAllText(Path + "\\Data.log");

我尝试过使用TextBoxRichTextBox 控件

【问题讨论】:

  • 线程会有所帮助,也可以查看文件流,但我会在线程中加载,这样 UI 会保持响应。
  • 我建议异步加载,这样你的 UI 就不会被阻塞
  • 为什么你会选择一个庞大的控件而不使用正确的名称? RichTextBox VTC

标签: c# visual-studio


【解决方案1】:
 StringBuilder sb = new StringBuilder();
            using (var sr = new StreamReader("path"))
            {
                do
                {
                    var line = sr.ReadLine();
                    sb.Append(line);
                } while (!sr.EndOfStream);
            }
            textBox1.Text = sb.ToString();

【讨论】:

    【解决方案2】:

    我个人推荐System.IO + 线程。

    例子:

    string[] files = ["file1.txt", "file2.txt"];
    void Main() {
         var th = new Thread(readFiles);
         th.Start();
    }
    
    void readFiles() {
        foreach (string file in files) {
            var fileContents = "";
            fileContents = System.IO.File.ReadAllText(file);
            // do something
        }
    }
    

    【讨论】:

    • 这并没有解决他的主要问题,即如何让 UI 保持响应...
    • 我已经试过 textBox2.Text = File.ReadAllText(Path + "\\data.log");但这会阻止应用程序
    • @FredrikNorling 使用线程不应该那样做。检查最新的编辑。
    【解决方案3】:

    我认为您可以虚拟地将文件拆分为块,然后按目的加载这些块。例如,当您打开编辑器时,您只加载文件的一部分(一个或几个块),然后当用户向下滚动时 - 您加载更多等等。块的大小取决于用户打开编辑器时显示的信息量。

    作为RichTextBox 的示例,您可以试试这个answer,但您仍然需要确定最适合您的块大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多