【问题标题】:Difference between DataView.Sort and DataTable.DefaultView.Sort ?DataView.Sort 和 DataTable.DefaultView.Sort 之间的区别?
【发布时间】:2015-04-06 12:52:40
【问题描述】:

我在 C# asp.net 项目中使用 DataTable。我想在DataTable 上申请sorting

  • 我有两种方法可以做到这一点,如下所示。

    1. 使用 DefaultView

DataTable dt= GetDataFromDB(); // Method to fetch Data. dt.DefaultView.Sort = "colName" + " " + "ASC"; dt= dt.DefaultView.ToTable();

  1. 使用 DataView.Sort

DataView sortedView = new DataView(ViewState["dt"] as DataTable); sortedView.Sort = "colName" + " " + "ASC"; // ViewState["dt"] is defined in Page_Load event in my Page.

  • 两者都适合我,但我想知道它们之间的区别以及就性能而言哪个更好。
  • 注意:我正在处理大量数据。(40000-60000 条记录。)

【问题讨论】:

  • 差别很小:第一次访问 DefaultView 属性将按需创建一个 DataView。在 ViewState 中存储大型 DataTable 可能会对性能产生更大的影响。
  • @Joe - 但我应该去哪一个? DataTableDataView 因为在第二种方式中 - 我必须投射 DataTable to DataViewViewState[] to DataTable

标签: c# asp.net c#-4.0 datatable


【解决方案1】:

DataTable.DefaultView 属性按需提供 DataView 类的实例。所以在性能方面它们是相同的。

您问题中示例代码的主要问题是将DataTable存储在ViewState中,如果DataTable的大小很大,则会导致性能问题。

此外,您始终可以将控件绑定到 DataView

dt= dt.DefaultView.ToTable();

将在内存中复制表,因为它将创建一个新表来提供排序数据..导致更多的内存使用!

【讨论】:

    【解决方案2】:

    我认为创建一个新的 DataView 更好,但不是按照您的方式。 DataView 创建索引,默认情况下它可能是项目的 ID。当您更改 Sort 属性时,将创建新索引。因此,当您使用 DefaultView 并使用 Sort 属性时,代码需要创建 2 个索引。当您使用 DataView 的重载构造函数时,您可以在其中声明排序查询,您将只创建单个索引:https://msdn.microsoft.com/pl-pl/library/8sd1cd0a(v=vs.110).aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-25
      • 2020-05-10
      • 2014-09-20
      • 2010-10-28
      • 2015-10-04
      • 2012-08-12
      • 2011-02-18
      • 2019-12-21
      相关资源
      最近更新 更多