gpt4 book ai didi

c# - 在内存不足问题的 C# 中对大型 gridview 进行排序

转载 作者:行者123 更新时间:2023-11-30 17:45:26 25 4
gpt4 key购买 nike

我的“高级”程序员将网格数据存储在 session 变量中,以便对其进行排序。

每隔一天我们都必须重新启动我们的服务器,因为它开始挂起。我觉得这是因为所有这些 Session 变量都在内存中 float 。

这是排序数据的最佳方式吗?有最佳实践吗?我们必须使用存储过程,因为这是他的规则。 Web 应用程序真的很慢,我对 SQL 的了解还不够,无法帮助加快速度。

关于 session 变量是否可行有什么想法吗?有没有更好的办法?

加载数据的方法

SqlConnection conn = new SqlConnection (ConfigurationManager.AppSettings ["ConnectionString"].ToString ());
SqlCommand cmd = conn.CreateCommand ();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "RandomStoredProdcedureName";
try
{
DataTable GridData = new DataTable ();
conn.Open ();
using (SqlDataAdapter Sqlda = new SqlDataAdapter (cmd))
{
Sqlda.Fill (GridData);
}
//Persist the table in the Session object. (for sorting)
Session ["GridData"] = GridData;

gvDetails.DataSource = GridData;
gvDetails.DataBind ();
}
catch (Exception ex)
{
Removed for brevity
}
finally
{
if (conn != null) {
conn.Close ();
}
}

排序方法

protected void gvDetails_Sorting (object sender, GridViewSortEventArgs e) {
//Retrieve the table from the session object.
DataTable GridData = Session ["GridData"] as DataTable;

if (GridData != null) {

//Sort the data.
GridData.DefaultView.Sort = e.SortExpression + " " + GetSortDirection (e.SortExpression);
gvDetails.DataSource = GridData;
gvDetails.DataBind ();
}
}

最佳答案

用户查看的记录不可能超过网格显示的行数 - 如果网格有 25 行,超过 25 行的任何内容都会浪费内存/CPU 时间来处理。 (请记住,这些数字不是“绝对值”——有些应用程序可能需要更多行,有些可能需要更少。这还取决于用户查看和理解数据的能力。有些用户在较少行的情况下工作得更好有一次,有些需要很多行——这甚至可能是用户偏好,但最重要的是,提取一个巨大的结果集几乎总是一种浪费。)

您在给定时间从数据库中提取的数据不应多于您可以在网格中显示的行数。排序应该在数据库中完成,这样您就可以只返回实际需要的行的子集。这最大限度地减少了您的网络服务器和数据库服务器之间的网络流量,并最大限度地减少了网络服务器上的内存使用,因为您只将数据存储在您实际需要的 View / session 状态中。

如果您使用 View 状态来存储数据(这比使用 Session 更好,因为您只在用户查看带有网格的特定页面时才存储数据),那么数据被发送到浏览器 - 您还可以通过这种方式最大限度地减少 Web 服务器和浏览器之间的网络流量。

如果用户试图对数据进行不同的排序或转到另一个页面,只需重复上述过程并根据新的页面索引和/或新的排序字段获取新的行。

编辑:

我刚刚注意到您在通常有 15 个用户并返回 50-1000 行的问题下添加了评论。除非您的网络服务器内存很少(或者除非您在数据库中的行很大),否则不太可能导致内存不足错误。您是否将其他大型结果集存储在 session 变量中?

关于c# - 在内存不足问题的 C# 中对大型 gridview 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27606244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com