sql-server - SQL 拍摄图像很慢
问题描述
我每分钟将图像写入 SQL Server 数据库,然后我每分钟通过客户端应用程序读取这些图像。
这是我如何将图像放入数据库的代码:
PictureBox1.Image.Save(mstream, System.Drawing.Imaging.ImageFormat.Bmp)
arrimage = mstream.GetBuffer()
drNowyWiersz3 = m_tabeladanych3.NewRow()
drNowyWiersz3("Id") = k
drNowyWiersz3("bitmap") = arrimage
m_tabeladanych3.Rows.Add(drNowyWiersz3)
drNowyWiersz3 = Nothing
drNowyWiersz3
是数据表的新行。
m_tabeladanych3
是数据表。
我有 6 张这样的图片(每张大约 8kb)。拍摄这些图像有时需要 1 分钟(!),尤其是当我通过 Wi-Fi 连接时,它会导致应用程序错误。
当图像格式为 .jpeg 但图像模糊时,情况要好得多。
如何改进流程?
编辑:
这是我用来读取图像的代码,也许这是问题所在?
Dim lb2() As Byte = m_tabeladanych3.Rows(1)("bitmap")
Dim lstr2 As New System.IO.MemoryStream(lb2)
PictureBox2.Image = Image.FromStream(lstr2)
lstr2.Close()
解决方案
原因.jpeg
是性能优于.bmp
因为第一个是压缩文件格式,而第二个不是。
为了改进您的设置,我将执行以下操作:
- 在将图像保存到数据库之前压缩图像
- 让客户端检索压缩文件,在客户端解压缩并显示它
作为一个例子,我使用了标准库:
using System.IO;
using System.IO.Compression;
这使您可以执行以下操作:
private void compressButton_Click(object sender, EventArgs e)
{
// Test image to compress:
FileInfo imageInfo = new FileInfo(@"C:\Temp\test.bmp");
// Compress image
using (FileStream imageToCompress = imageInfo.OpenRead())
using (FileStream gzippedImage = File.Create(imageInfo.FullName + ".gz"))
using (GZipStream gZipStream = new GZipStream(gzippedImage, CompressionMode.Compress))
imageToCompress.CopyTo(gZipStream);
Console.WriteLine("Test image compressed using Gzip...");
// Delete original image
File.Delete(imageInfo.FullName);
}
private void decompressButton_Click(object sender, EventArgs e)
{
// Test image to decompress:
FileInfo imageInfo = new FileInfo(@"C:\Temp\test.bmp.gz");
// Decompress image
using (FileStream imageToDecompress = imageInfo.OpenRead())
using (FileStream decompressedImage = File.Create(imageInfo.FullName.Replace(".gz", ""))) // There are a million other ways to do this, but hey ...
using (GZipStream gZipStream = new GZipStream(imageToDecompress, CompressionMode.Decompress))
gZipStream.CopyTo(decompressedImage);
Console.WriteLine("Gzipped test image decompressed...");
// Delete gzip
File.Delete(imageInfo.FullName);
}
除了在这种情况下使用压缩数据之外,您还可以通过在读取/写入时使用异步流(即使用Stream.ReadAsync
和Stream.WriteAsync
或类似模式)来增加客户端-服务器连接的弹性。
推荐阅读
- python - 如何持续跟踪我钱包中特定代币的余额
- amazon-web-services - 如何最好地维护 Redshift 集群
- python - matplotlib 散点图,带有非连续 y 轴刻度,数据类型为整数
- php - 当在 PHP 中命中 API 端点时,如何编写 HTML 模板并使用自定义用户名作为 files_names 创建该 HTML 文件?
- javascript - django中使用choiceField的动态表单
- android - Android Fragment 避免在后按时刷新
- c# - 从 SOAP c# 扩展 wsdl 类
- python - Python 没有在生成的进程上清理 TemporaryDirectory
- azure - Azure - 使用 replyUrlsWithType 创建应用注册
- php - 执行选择查询后,Laravel 何时关闭与数据库的连接?