【问题标题】:Paging through a datatable in codebehind在代码隐藏中对数据表进行分页
【发布时间】:2011-08-01 13:24:09
【问题描述】:

我需要处理来自我无法控制的数据库(SQL、Oracle、Access、MySQL、Sharepoint 等)的非常大的数据表(超过 200 万行):目前我遍历每一行和每一列构建一个字符串对象,但是我以大约 100k 行运行 out of memory

我可能采取的唯一解决方案是将数据表分解成更小的部分,并在开始下一个行块之前保留每个块。

由于我无法添加 ROW_NUMBER() 或类似内容,我必须处理填充的数据表。

如何轻松(牢记性能)将填充的数据表拆分为更小的数据表,例如分页?

PS 这个功能没有视觉组件。

【问题讨论】:

    标签: c# datatable


    【解决方案1】:

    您是否使用字符串连接?像这样string += string

    将其更改为StringBuilder,您应该不会遇到问题,至少对于 20k 行不会。

    【讨论】:

    • 我已将您的答案标记为正确答案,但实际上这不是完整的答案。我最终将传入的数据表分成 500 行批次。
    • Tnx。当有人提到字符串和性能时,这只是我的下意识反应 :) 我只是好奇,您没有详细说明为什么要使用 100k 行的字符串表示。另外,如果您可以显示一些代码,我们可能会提供进一步的帮助..
    • 请参阅此 Q:stackoverflow.com/questions/5388682/…,了解(现已完成)项目的概述。 MySQL 只是一个正在添加的新数据源
    【解决方案2】:

    如果您正在谈论填充 DataTable 对象(在处理之前将调用结果加载到内存中),您可能最好为每个提到的提供程序使用数据读取器,这样您就可以处理每一行因为它是从数据库中读取的,而不是将 DataTable 存储在内存中...

    great answer to another question 列出了数据读取器/数据表的优缺点

    如果您已经在使用数据读取器,请忽略这一点。但是您的内存问题可能来自还存储检索到的结果...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 2017-11-15
      • 1970-01-01
      • 2017-04-16
      • 2020-06-28
      相关资源
      最近更新 更多