使用C#在SQL Server中存储图像

我想在SQL Server数据库中将我的员工的图像与他们的个人资料详细信息存储在SQL中,但我有以下保留:

我是否应该压缩图像?如果是,请社区向我提供示例代码或指导我帮助我这样做的指南。

我该如何有效地检索图像? 我害怕asp.net应用程序性能问题。 我认为有数千个员工记录,系统可能会停止或减速。

我建议在sql表上存储图像的路径,并将图像实际存储在安全文件夹中。 这对我来说非常有用。

Sql Server可以很好地处理大量的二进制数据,但是一如既往,恶魔在于细节和设计:

为了避免由于Sql Server的分页过程(所有数据库引擎使用页面作为数据操作的离散单位)而报告或访问其他应用程序时可能发生的任何性能问题,我会将图像数据放在一个单独的表中,该表连接到1- to1到你的员工表。 这样做可以防止二进制数据在从系统的其他部分访问时不必要地移动员工查询。 您的图像显示逻辑当然必须连接两个表以匹配员工和图像记录。

首先,一万条记录什么都没有……只要你有正确的索引,SQL Server就可以轻松处理它。

但是,请考虑仅使用文件系统来存储图像之类的内容。 SQL Server记录可能只包含文件的指针(即路径),asp.net应用程序可以使用它来从磁盘读取文件并将其流式传输到浏览器。

大多数图像格式(例如JPEG或PNG)已经采用了一些压缩算法,因此除非您的源是RAW图像或未压缩的位图,否则额外的压缩将无济于事。 可能有用的是限制图像的大小,例如最大400 x 400像素。 我不知道预期的目的是什么,所以我不知道这是否适合你。 显然,如果您直接从数码相机存储数据,图像将非常大,您可能希望首先缩小它们,使其更合理。

如果您使用的是SQL Server 2008或更高版本,则可以使用类似于两全其美的文件流function。 它将图像存储在文件系统中,但它在事务控制下,并且在获取时也包含在备份中。

如果您不是2008年或以上,那么我会说保留数据库中的图像,请参阅这篇旧的Microsoft白皮书,原因我的原因。

http://arxiv.org/pdf/cs.DB/0701168