为什么使用SqlDataReader读取大数据量包含Image字段的记录集的时候会很慢?

oldmht 2009-01-15 04:29:54
我有一个表T1,有2万条记录,其中F1字段是Image类型的,用于保存用户上传的文件,一般是100k字节大小
用下面的方法来读取其中第1001到1010条记录,按理说,使用SqlDataReader的话,应该速度上会快很多,
但是结果却发现,打开记录集的速度很快,可是读取的速度很慢,并且有一个奇怪的问题,即使不读取任何数据
只是在打开后就关闭SqlDataReader,同样很慢,慢在Close()这个语句上
1 SqlCommand Command = new SqlCommand();
2 Command.Connection = SQLHelper.Connection;
3 Command.CommandText = "select F1 from T1";
4 Command.CommandType = CommandType.Text;
5 SqlDataReader Reader = Command.ExecuteReader();
6 Reader.Close();
1到5行,都很快的运行过去了,就是卡在第6行,大半分钟都不行,同时sqlserver占用的内存不断上涨,
如果不关闭,后面又不能再在同一个Connection上运行其他的sql了
...全文
250 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
baijking 2010-03-11
  • 打赏
  • 举报
回复
顶。。。。。。。。。。。。。。。。。
ysj52zqq 2009-01-15
  • 打赏
  • 举报
回复
用datatable或dataset
zlb789 2009-01-15
  • 打赏
  • 举报
回复
关键就在你的image 类型,

你这里数据只有10条 跟sqldatareader 没有关系
oldmht 2009-01-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fuqiang19871117 的回复:]
数据库中最好不要以Iamge的形式存图片,那样读出来的时候速度会非常慢,建议你还是用存图片的路径吧
[/Quote]

这个我知道,因为要加密,要权限判断
现在不是讨论这个问题,我后来改了一下,只取ID字段的话,即使是30多万记录的表也不要1秒就能遍历或者直接关闭
现在的问题是,如果我一定要取某一页的image字段的话,难道要取两次么?一次是只取ID,得到该页的ID列表,第二次是
通过这个ID列表,再去取需要的Image字段,这个不是很麻烦么
hongqi162 2009-01-15
  • 打赏
  • 举报
回复
使用select * 对包含存储图片的表进行处理是不合理的,把你的结果里面的保存图片字段去除掉在需要的时候重新到数据库里面取
journeydj 2009-01-15
  • 打赏
  • 举报
回复
20000*100k =2G... 没算错吧。。
还想要多快。
journeydj 2009-01-15
  • 打赏
  • 举报
回复
肯定会很慢。。1个图片能和一个普通字符串比速度吗。。
xiaojin0710 2009-01-15
  • 打赏
  • 举报
回复
学习了,帮顶
68435970 2009-01-15
  • 打赏
  • 举报
回复
数据库中最好不要以Iamge的形式存图片,那样读出来的时候速度会非常慢,建议你还是用存图片的路径吧
qiume 2009-01-15
  • 打赏
  • 举报
回复
用SqlDataAdapter替代SqlDataReader试试......

110,536

社区成员

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

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

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