我有一个C# win表单,我在其中读取文件并在datagridview中显示行。一切都很好..我使用delegate和Invoke来显示正在读取的行。它还显示了一个进度条,并执行一些其他操作,如计算行长度和解析行以从每行中提取特定字段。
只是好奇,如果有人尝试过这种实现的话。目前,我的应用程序在3分钟多一点的时间内读取了一个250MB的文件(大约有12000行)(win7 32位/赛扬2.66 4GB/4 4GB)。我想知道是否有可能减少时间-更像是通过改变我实现它的方式。
发布于 2010-02-17 11:59:23
嗯,你对这件事有了新的想法是非常正确的。托尔斯泰的“战争与和平”可能是最难读的一本书,大约有50万字。你在屏幕上显示的内容要多出上百倍。把这么多信息显示在屏幕上需要多长时间并不重要,你的用户甚至要花很长时间才能滚动浏览它。
就我个人而言,我会犹豫是否会在列表中列出超过50项的项目。最多100个。除此之外,它对人类来说是一种纯粹的折磨。
为了达到这个目的,允许你的用户过滤内容,在巨大的结果集中逐渐向下钻取到一个相关的项目。从你的问题中还不清楚到底应该是什么样子。想一想,我相信你会想出一些办法的。
发布于 2010-02-17 11:34:58
好的……我喜欢这些问题。为什么要在数据网格中向用户显示250MB的数据?终端用户不可能在网格中处理理解250MB的数据。如果最终用户要求你提供这个功能,你需要从“这是个坏主意”的角度来解决这个问题。在大多数情况下,性能问题通常可以通过教育用户来解决。:-D
发布于 2010-02-17 17:09:44
首先,您不需要加载整个文件,也不需要显示它。您可以加载它的某些部分以进行显示。也就是说,在网格中,你无论如何都不能显示enire文件,屏幕只有那么大。考虑只加载您显示的内容(外加一些额外的行以实现平滑滚动),并在用户滚动内容时根据需要加载其余内容。用户将不会意识到文件仅被部分加载。
更好的是,如果你有一些逻辑分组,你可以在一本书中显示章节,在财务类型的应用程序中,无论是按帐户还是按时间段。
https://stackoverflow.com/questions/2278084
复制相似问题