Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 从流数据库读取图像_.net_Vb.net_Sql Server 2008 - Fatal编程技术网

.net 从流数据库读取图像

.net 从流数据库读取图像,.net,vb.net,sql-server-2008,.net,Vb.net,Sql Server 2008,亲爱的,总而言之,我在流媒体数据库中遇到了一个问题。 我已经在那里写了一张图片,现在我想回忆一下并把它放在一个图片盒里。 有谁能告诉我做这件事的最佳做法吗? 非常感谢您。IMO最简单的方法是从数据库中读取所有数据并将其写入内存流。倒带流(设置Position=0),然后使用或。请注意,您不应处理流。。。位图在您构建流之后有效地“拥有”了它。IMO最简单的方法是从数据库读取所有数据并将其写入内存流。倒带流(设置Position=0),然后使用或。请注意,您不应处理流。。。在您构建流之后,位图将有效

亲爱的,总而言之,我在流媒体数据库中遇到了一个问题。
我已经在那里写了一张图片,现在我想回忆一下并把它放在一个图片盒里。
有谁能告诉我做这件事的最佳做法吗?

非常感谢您。

IMO最简单的方法是从数据库中读取所有数据并将其写入
内存流。倒带流(设置
Position=0
),然后使用或。请注意,您不应处理流。。。位图在您构建流之后有效地“拥有”了它。

IMO最简单的方法是从数据库读取所有数据并将其写入
内存流。倒带流(设置
Position=0
),然后使用或。请注意,您不应处理流。。。在您构建流之后,位图将有效地“拥有”流

  • 校准
    ExecuteNonQuery
    方法以获取带有图像的字节数组
  • 在字节数组周围创建一个新的
    MemoryStream
    (不要破坏流,因为图像对象将继续使用它)
  • 调用
    Image.FromStream
    读取流
  • 将此图像设置为PictureBox的
    image
    属性
  • 校准
    ExecuteNonQuery
    方法以获取带有图像的字节数组
  • 在字节数组周围创建一个新的
    MemoryStream
    (不要破坏流,因为图像对象将继续使用它)
  • 调用
    Image.FromStream
    读取流
  • 将此图像设置为PictureBox的
    image
    属性

  • 当图像很小或流量很小时,上述任何一种方法都能起作用,它们都是很好的演示软件。随着图像大小的增加,事情开始失控,因为所有这些解决方案都要求将整个图像作为字节数组存储在内存中。如果服务器上的负载很大,那么让所有这些映像文件副本占用宝贵的进程地址空间,这会大大影响性能

    可以使用流语义从数据库中读取,这样就不会将文件的整个副本存储在内存中:

    • 使用提示:
    为DataReader提供一种 处理包含具有 大的二进制值。而不是 加载整行, 顺序访问使 DataReader将数据作为流加载。 然后可以使用GetBytes或 GetChars方法指定一个字节 开始读取操作的位置, 以及数据的有限缓冲区大小 被归还

    • 使用
    • 将数据分块写入输出流
    最后一点有点问题。您可以将流写入虚拟映射到站点的WWW服务器本地文件夹,然后返回此文件的URL。或者,您可以使用一个URL来读取图片本身并将图像直接写入ASP输出缓存。第一种方法可以为频繁访问的图像带来回报,因为缓存的文件可以服务于多个请求,但它需要失效和清理逻辑。第二种方法更适合访问不频繁的图像,但需要在应用程序中使用正确的路由逻辑


    当事情开始变得非常热时,就会出现在封送这些图像时线程被阻塞的问题,您将不得不转向一个完全符合流复制语义的模型。

    当图像很小或流量很小时,上面提到的任何方法都可以工作,它们都是很好的演示软件。随着图像大小的增加,事情开始失控,因为所有这些解决方案都要求将整个图像作为字节数组存储在内存中。如果服务器上的负载很大,那么让所有这些映像文件副本占用宝贵的进程地址空间,这会大大影响性能

    可以使用流语义从数据库中读取,这样就不会将文件的整个副本存储在内存中:

    • 使用提示:
    为DataReader提供一种 处理包含具有 大的二进制值。而不是 加载整行, 顺序访问使 DataReader将数据作为流加载。 然后可以使用GetBytes或 GetChars方法指定一个字节 开始读取操作的位置, 以及数据的有限缓冲区大小 被归还

    • 使用
    • 将数据分块写入输出流
    最后一点有点问题。您可以将流写入虚拟映射到站点的WWW服务器本地文件夹,然后返回此文件的URL。或者,您可以使用一个URL来读取图片本身并将图像直接写入ASP输出缓存。第一种方法可以为频繁访问的图像带来回报,因为缓存的文件可以服务于多个请求,但它需要失效和清理逻辑。第二种方法更适合访问不频繁的图像,但需要在应用程序中使用正确的路由逻辑


    当事情开始变得非常热时,封送这些图像时线程被阻塞的问题开始出现,您将不得不转向一个完全符合流复制语义的模型。

    谢谢您,这是我的第一个想法,但我正在寻找比这更好的方法(如果有的话)。@Lefteris:什么样的“更好”你在找什么?你不喜欢这个解决方案的什么?这不是我不喜欢的,但如果有其他的东西。在我看来,这是最好的做法。非常感谢。谢谢你这是我的第一个想法,但我正在寻找比这更好的东西(如果有的话)。@Lefteris:你在寻找什么样的“更好”?你不喜欢那个解决方案的什么?不是我不喜欢的,而是我喜欢