我正在编写一个c#实用程序,它需要过滤和显示大型文本文件(大小超过100MB)。
该实用程序以只读模式打开文本文件,应允许滚动文本、跳转到特定行号、搜索文本模式并根据用户定义的过滤器仅显示特定行。
我希望我的实用程序在按下“加载”按钮后很快为用户提供对文件的访问权限,这就是我遇到的问题:
我能够克服将文本文件快速读入DataTable的问题,但是,当我想在DataGridView中显示它时,加载时间太长了。我使用的是DataGridView,因为我需要在文本的每一行附近显示额外的列。
我在网上找到的唯一建议是每次只显示文件的一部分。这个解决方案听起来非常适合我的需要,但也带来了一些问题:
-
加载文件后不久,用户将希望开始执行诸如移动到特定行、搜索文本或过滤等操作,因此,将文件异步加载到DataGridView可能不是解决我的问题的最佳解决方案。
-
其他解决方案建议加载文件的前N行和最后M行,并在用户滚动时添加缺失的行。在这里,我遇到了将DataGridView中的行号映射到DataTable中的行号的问题:如果我滚动到末尾然后开始向上滚动,或者直接跳到特定的行号,我如何知道哪些行已经加载,哪些行还没有加载?
以前有人解决过这样的问题吗?