我有一个C#win表单,我在其中读取文件并在datagridview中显示行。一切正常..我使用委托和Invoke来显示正在阅读的行。它还显示了一个进度条,并执行其他一些操作,如计算行长度和解析行以从每行中提取某些字段。
只是好奇,如果有人尝试过这种实现。目前我的应用程序在3分钟内读取250MB文件(大约12000行)(Win 7 32bit / celeron 2.66Ghz / 4GB)。我想知道是否可以减少时间 - 更多的是通过改变我实现它的方式。
答案 0 :(得分:3)
嗯,你对此有了第二个想法是对的。托尔斯泰的“战争与和平”可能是最艰难的阅读,大概有五十万字。你倾倒到屏幕上的是一百倍。将这么多信息放在屏幕上花费多长时间并不重要,它会让您的用户更长时间地浏览它。
我个人犹豫是否要在列表中添加超过50个项目。 100个上衣。除此之外,对于一个人来说,它变成了纯粹的折磨。
要实现这一目标,请允许您的用户过滤内容,逐步向下钻取相关项目的巨大结果集。从你的问题来看,究竟应该是什么样子。想一想,我相信你会想出一些东西。
答案 1 :(得分:1)
好的......我喜欢这些问题。为什么要在数据网格中向用户显示250mb的数据?最终用户无法理解网格中250mbs的数据。如果最终用户向您施加压力要求您使用此功能,则需要从“这是个坏主意”的角度与他们一起解决。在大多数情况下,通过教育用户通常可以解决性能问题。 :-D
答案 2 :(得分:0)
首先,您不需要加载整个文件,也不需要显示它。您可以加载部分内容进行显示。即在网格中,无论如何都无法显示enire文件,屏幕只有这么大。考虑仅加载您显示的内容(加上一些额外的行以进行平滑滚动),并在用户滚动浏览内容时按需加载其余内容。用户将不知道该文件仅部分加载。
如果你有一些逻辑分组,你可以通过账户或时间段在财务类型的应用程序中显示章节,这样会更好。
答案 3 :(得分:0)
像VirtualMode这样的东西可以帮助你:
虚拟模式设计用于非常大的数据存储。当VirtualMode属性为true时,您创建一个具有设定行数和列数的DataGridView,然后处理CellValueNeeded事件以填充单元格。虚拟模式需要实现底层数据缓存,以根据用户的操作处理DataGridView单元的填充,编辑和删除。有关实施虚拟模式的详细信息,请参阅How to: Implement Virtual Mode in the Windows Forms DataGridView Control。
P.S。关于性能:除了性能分析工具之外,没有人能帮助您解决任何与性能相关的问题。