【问题标题】:WinForms Invoke/BeginInvokeWinForms 调用/BeginInvoke
【发布时间】:2010-02-17 03:20:30
【问题描述】:

我有一个 C# win 表单,我在其中读取文件并在 datagridview 中显示行。一切正常......我使用委托和调用来显示正在阅读的行。它还显示一个进度条并执行一些其他操作,例如计算行长并解析行以从每行中提取某些字段。

只是好奇,是否有人尝试过这种实现。目前,我的应用在 3 分钟多一点(Win 7 32bit/celeron 2.66Ghz/4GB)内读取了一个 250MB 的文件(大约 12000 行)。我想知道是否有可能减少时间 - 更像是通过改变我实现它的方式。

【问题讨论】:

  • 你是如何阅读文件的?
  • 如果你想提高加载文件的性能,你必须发布加载它的代码。
  • 您需要添加一些有关如何实施它的详细信息以获得任何有用的建议。
  • 数据加载时是否需要实现数据网格视图?也许您可以在数据加载后显示加载消息并进行绑定。在绑定容器列表时添加数据太慢了。

标签: c# .net winforms delegates


【解决方案1】:

好吧,您对此有第二个想法是完全正确的。托尔斯泰的《战争与和平》可能是最难读的一本书,大约有 50 万字。你在屏幕上倾倒的东西是一百倍。将这么多信息放在屏幕上需要多长时间并不重要,您的用户甚至需要更长的时间才能滚动浏览它。

我个人犹豫是否将超过 50 个项目放入列表中。 100 顶。除此之外,这对人类来说简直就是折磨。

要实现这一目标,请允许您的用户过滤内容,逐步在庞大的结果集中向下钻取到相关项目。从您的问题中不清楚应该是什么样子。想一想,我相信你会想出办法的。

【讨论】:

    【解决方案2】:

    好的...我喜欢这些问题。为什么要在数据网格中向用户显示 250mbs 的数据?最终用户无法处理理解网格中 250mbs 的数据。如果最终用户向您施加此功能的压力,您需要从“这是一个坏主意”的角度与他们一起解决这个问题。在大多数情况下,性能问题通常可以通过教育用户来解决。 :-D

    【讨论】:

    • 我在尝试此操作时得到的答案:“我可以理解您为什么说这是一个坏主意,但我仍然想要它,并且尽可能地发挥您的最佳性能。”
    【解决方案3】:

    首先,您不需要加载整个文件,也不需要显示它。您可以加载其中的一部分进行显示。即在网格中,无论如何您都无法显示 enire 文件,屏幕只有这么大。考虑只加载您显示的内容(加上一些额外的行以实现平滑滚动)并在用户滚动内容时按需加载其余内容。用户不会意识到文件只是部分加载。

    如果您有一些逻辑分组,那就更好了,您可以在一本书中按帐户或时间段在财务类型的应用程序中显示章节。

    【讨论】:

      【解决方案4】:

      也许像VirtualMode 这样的东西可以帮助你:

      虚拟模式设计用于非常大的数据存储。当 VirtualMode 属性为 true 时,您将创建一个具有一定数量的行和列的 DataGridView,然后处理 CellValueNeeded 事件以填充单元格。虚拟模式需要实现底层数据缓存,以根据用户的操作来处理DataGridView 单元的填充、编辑和删除。有关实现虚拟模式的更多信息,请参阅How to: Implement Virtual Mode in the Windows Forms DataGridView Control

      附:关于性能:除了 profiling 工具,没有人能帮你解决任何与性能相关的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-25
        • 2011-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多