MemoryStream stream = new MemoryStream(b, true);

procedure123 2010-01-19 09:07:52
string strCmd = String.Format("SELECT photo FROM Photos WHERE id = {0}", index);
SqlCommand cmd = new SqlCommand(strCmd, sqlConn);

byte[] b = (byte[])cmd.ExecuteScalar();
if(b.Length > 0)
{
System.IO.MemoryStream stream = new System.IO.MemoryStream(b, true);
stream.Write(b, 0, b.Length);

image=new Bitmap(stream);

stream.Close();
}
其中下面代码中参数(b, true)是什么意思呢?

System.IO.MemoryStream stream = new System.IO.MemoryStream(b, true);
...全文
328 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
procedure123 2010-01-20
  • 打赏
  • 举报
回复
http://hi.baidu.com/fuping111/blog/item/9571fe0398648fec09fa93e9.html
还说CPU缓存有一级,二级,现在都上三级了,不知道这些资料是错还是对,
procedure123 2010-01-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 vrhero 的回复:]
引用 4 楼 procedure123 的回复:
CPU缓存的数据都是内存数据的复制品吧,怎么知道这个数组b肯定存在于缓存了呢?

CPU是不会缓存数据的,因为CPU根本就没有数据!CPU只处理指令...你没学过计算机原理?去学学吧...
[/Quote]
操作系统的任务主要是合理地调配系统的各种资源,为各种程序的运行提供环境,它可以看作是硬件和应用软件之间的一个媒介。其中对内存的管理是系统的最主要的职责,怎么样使有限的内存用在刀刃上,怎么要保证系统本身所需的内存(以防止死机,在win2000和winxp里这一点已经做的非常好了
缓存是CPU的一部分,它存在于CPU中
CPU存取数据的速度非常的快,一秒钟能够存取、处理十亿条指令和数据(术语:CPU主频1G),而内存就慢很多,快的内存能够达到几十兆就不错了,可见两者的速度差异是多么的大
缓存是为了解决CPU速度和内存速度的速度差异问题
内存中被CPU访问最频繁的数据和指令被复制入CPU中的缓存,这样CPU就可以不经常到象“蜗牛”一样慢的内存中去取数据了,CPU只要到缓存中去取就行了,而缓存的速度要比内存快很多
什么是缓存区容量?
在combo中缓存区容量指的是什么?是不是数字越大,价格便越高,并且性能越高,刻坏的几率越小
这里要特别指出的是:
1.因为缓存只是内存中少部分数据的复制品,所以CPU到缓存中寻找数据时,也会出现找不到的情况(因为这些数据没有从内存复制到缓存中去),这时CPU还是会到内存中去找数据,这样系统的速度就慢下来了,不过CPU会把这些数据复制到缓存中去,以便下一次不要再到内存中去取。
2.因为随着时间的变化,被访问得最频繁的数据不是一成不变的,也就是说,刚才还不
频繁的数据,此时已经需要被频繁的访问,刚才还是最频繁的数据,现在又不频繁了,
所以说缓存中的数据要经常按照一定的算法来更换,这样才能保证缓存中的数据是被访
问最频繁的

http://hi.baidu.com/fuping111/blog/item/9571fe0398648fec09fa93e9.html

那我误解这段话了吗?还是资料本身有问题.链接如上,
又查了资料,说硬盘也有缓存芯片,
vrhero 2010-01-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 procedure123 的回复:]
CPU缓存的数据都是内存数据的复制品吧,怎么知道这个数组b肯定存在于缓存了呢?
[/Quote]
CPU是不会缓存数据的,因为CPU根本就没有数据!CPU只处理指令...你没学过计算机原理?去学学吧...
vrhero 2010-01-20
  • 打赏
  • 举报
回复
为什么不去看MSDN?
[Quote=引用 MSDN:]
MemoryStream() 使用初始化为零的可扩展容量初始化 MemoryStream 类的新实例。
MemoryStream(Byte[]) 基于指定的字节数组初始化 MemoryStream 类的无法调整大小的新实例。
MemoryStream(Int32) 使用按指定要求初始化的可扩展容量初始化 MemoryStream 类的新实例。
MemoryStream(Byte[], Boolean) 使用按指定要求设置的 CanWrite 属性基于指定的字节数组初始化 MemoryStream 类的无法调整大小的新实例。
MemoryStream(Byte[], Int32, Int32) 基于字节数组的指定区域(索引)初始化 MemoryStream 类的无法调整大小的新实例。
MemoryStream(Byte[], Int32, Int32, Boolean) 使用按指定要求设置的 CanWrite 属性基于字节数组的指定区域初始化 MemoryStream 类的无法调整大小的新实例。
MemoryStream(Byte[], Int32, Int32, Boolean, Boolean) 在按指定要求设置 CanWrite 属性而且能够调用按指定要求设置的 GetBuffer 的情况下,基于字节数组的指定区域初始化 MemoryStream 类的新实例。 [/Quote]
procedure123 2010-01-19
  • 打赏
  • 举报
回复
原代码中的stream.Write(b, 0, b.Length); 是从缓存中向内存流中写数据,那么数据必须在缓存中存在,
怎么知道需要写人内存流的数据肯定存在于缓存中了呢?
CPU缓存的数据都是内存数据的复制品吧,怎么知道这个数组b肯定存在于缓存了呢?

procedure123 2010-01-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 koukoujiayi 的回复:]
b--byte[]数组
true--可写入

[/Quote]

MemoryStream必须是基于一个已经存在的byte[]数组,如上面的b创建吗?这样,这个b数组就是这个MemoryStream对象所封装的数据了吗?
例如MemoryStream stream=new MemoryStream(100)行吗?这样,该MemoryStream是否封装一个容量为100个字节的空字节数组呢?那其数组名字是否要在方法READ()或者WRITE()时才能确定呢?
koukoujiayi 2010-01-19
  • 打赏
  • 举报
回复
b--byte[]数组
true--可写入
xray2005 2010-01-19
  • 打赏
  • 举报
回复
//
// 摘要:
// 使用按指定要求设置的 System.IO.MemoryStream.CanWrite 属性基于指定的字节数组初始化 System.IO.MemoryStream
// 类的无法调整大小的新实例。
//
// 参数:
// buffer:
// 从中创建该流的无符号字节数组。
//
// writable:
// System.IO.MemoryStream.CanWrite 属性的设置,确定流是否支持写入。
public MemoryStream(byte[] buffer, bool writable);

110,537

社区成员

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

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

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