2010-09-14 63 views
1

目前,我们存储在我们的C#解决方案DLL中的报告模板(Word文档)为二进制数组。二进制数据是无法管理

public readonly static byte[] audit_engagement_template = new byte[] {208,207,17,224,161,177,26,225,0,0,0,0,0,0,0,0,... 

等等等等,现在这个文件已经变得庞大而难以处理非常作为Visual Studio中开始使用的内存在的2.5Gb时,它是开放的。

我们使用这些数据存储在数据库中,但我们需要让我们的数据库占用尽可能小,同时降低打开/编辑从客户端这些模板时使用的带宽。这就是我们将这些文件直接移入解决方案的原因。

任何人都可以提出要去关于存储这些文件(而不是允许客户从应用程序之外的触摸它们)其它方法吗?

+2

你为什么不能保存模板在磁盘上,因为他们,或在一个加密的压缩文件(例如)? – Oded 2010-09-14 08:44:00

回答

4

而不是将它们放在二进制字节数组,尝试包括文件,在DLL中嵌入的资源,然后利用Assembly.GetManifestResourceStream加载它们。检查,但我认为这可能是更有效的......它会肯定是代码和数据的更好的分离。

+0

将文档添加到项目的资源文件。然后通过简单地导入项目的.Properties命名空间并使用Resources.xxx来检索文件来检索字节数组。 – Dylan 2010-09-14 12:56:29

+0

@Dylan:嗯......我会亲自使用单独的文件和“嵌入式资源”的构建动作......但无论对你有用。 – 2010-09-14 13:08:56

0

您正在使用什么数据库? SQL Server将使用FILESTREAM功能执行您想要的操作。它使用本地文件系统来存储文件,因此它们只存在于一个文件夹中,但是它们通过SQL访问。备份变得更容易,并且授予只读访问权限也很容易。

更多信息请参见the MSDN article

+0

不幸的是,这不是一个选项,因为我们需要保持与SQL 2000的向后兼容性,直到至少在今年年底。 – Dylan 2010-09-14 08:53:25