千万量级数据的处理问题

xiaotangtang11 2012-05-22 04:05:19
最近做的一个数据库管理系统 由于数据量过大 现在出现了System.OutOfMemoryException的问题请问如何处理
源代码:
if (Session["Power"].ToString() == "管理员")
{
Response.Write("<script> alert('您没有去重权限')</script>");
}
else
{
int rows = 0;
BLL.CustomInfor bll = new BLL.CustomInfor();
DataSet ds1 = bll.SelectForDelete("业主");
for (int i = 0; i < ds1.Tables[0].Rows.Count; i++)
{
DataSet ds2 = bll.SelectByID("业主", Convert.ToInt32(ds1.Tables[0].Rows[i]["C_id"].ToString()));
for (int j = 0; j < ds2.Tables[0].Rows.Count; j++)
{
if (ds1.Tables[0].Rows[i]["C_Phone"].ToString() == ds2.Tables[0].Rows[j]["C_Phone"].ToString())
{
rows = rows + bll.DeleteCus(Convert.ToInt32(ds2.Tables[0].Rows[j]["C_id"].ToString()));
}
}
}
Response.Write("<script> alert('共删除了" + rows + "条数据')</script>");
}
Bind();
...全文
233 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
每次查询1000条,分开查询。
amokall 2012-05-22
  • 打赏
  • 举报
回复
直接通过sql语句在数据库删除重复数据,不要读取出来用程序判断是否重复
xiaotangtang11 2012-05-22
  • 打赏
  • 举报
回复
        if (Session["Power"].ToString() == "管理员")
{
Response.Write("<script> alert('您没有去重权限')</script>");
}
else
{
int rows = 0;
BLL.CustomInfor bll = new BLL.CustomInfor ();
DataSet ds1 = bll.SelectForDelete("其他");//查询出“其他”类别的数据
for (int i = 0; i < ds1.Tables[0].Rows.Count; i++)
{

DataSet ds2 = bll.SelectByID("其他", ds1.Tables[0].Rows[i]["C_Phone"].ToString());//查询出其他类别中电话相同的信息
for (int j = 0; j < ds2.Tables[0].Rows.Count; j++)
{

if (Convert.ToInt32(ds2.Tables[0].Rows[j]["C_Id"].ToString()) > Convert.ToInt32(ds1.Tables[0].Rows[i]["C_Id"].ToString()))
{
rows = rows + bll.DeleteCus(Convert.ToInt32(ds2.Tables[0].Rows[j]["C_id"].ToString()));//删除ID比较大的那一项也就是后插入的那一条数据
}
}
}
Response.Write("<script> alert('共删除了" + rows + "条数据')</script>");
}
Bind();
这是写了注释的代码
xiaotangtang11 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
引用 5 楼 的回复:
引用 4 楼 的回复:
你千万数据全放datatable了吧
是的~


每次查询只查一页不就行了吗 为什么要都放进去呢 如果你硬要都放进去 估计你那代码再怎么调整也没用

因为它是要占用大量内存的 再者说加载的时间也不是一般人能接受的 System.OutOfMemoryException

已经提示你内存溢出了嘛
[/Quote]那去重怎么处理呢?你需要提出每一条数据然后跟数据库的比对 这个也用sql语句写分页实现吗?
xiaotangtang11 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
分页吧,再多内存也架不住数据多啊
[/Quote]是用Sql 语句写分页吗?gridview的自带分页不行吗?
刘津宇教编程 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 4 楼 的回复:
你千万数据全放datatable了吧
是的~
[/Quote]

每次查询只查一页不就行了吗 为什么要都放进去呢 如果你硬要都放进去 估计你那代码再怎么调整也没用

因为它是要占用大量内存的 再者说加载的时间也不是一般人能接受的 System.OutOfMemoryException

已经提示你内存溢出了嘛
macooidle 2012-05-22
  • 打赏
  • 举报
回复
分页吧,再多内存也架不住数据多啊
crackdung 2012-05-22
  • 打赏
  • 举报
回复
你用這個最快的表格來加載你的數據,肯定比其它表格快10倍以上

http://www.dapfor.com/en


我博客有xx版本

這裡
xiaotangtang11 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
你千万数据全放datatable了吧
[/Quote]是的~
种草德鲁伊 2012-05-22
  • 打赏
  • 举报
回复
你千万数据全放datatable了吧
EnForGrass 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:

好像有什么游标之类的可以用吧,不能一次性全部读出来。
程序里读出来一部分就行了,用户如果选择往下浏览,到了最下边再重新读,大概是这样的。
这个做的是一次性将这一类的重复数据全部删除,不需要用户看到界面的
[/Quote]
分块加载,分页处理
xiaotangtang11 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

好像有什么游标之类的可以用吧,不能一次性全部读出来。
程序里读出来一部分就行了,用户如果选择往下浏览,到了最下边再重新读,大概是这样的。
[/Quote]这个做的是一次性将这一类的重复数据全部删除,不需要用户看到界面的
hard9999 2012-05-22
  • 打赏
  • 举报
回复
好像有什么游标之类的可以用吧,不能一次性全部读出来。
程序里读出来一部分就行了,用户如果选择往下浏览,到了最下边再重新读,大概是这样的。

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧