c# - 多个小文件的磁盘大小

标签 c# windows hard-drive diskspace

Size: ~5mb

Size on Disk: ~3gb

我们使用 C# 并在数据变化时不断保存数据,所有文件数据都必须在任何给定时间都可以访问。基本上,如果某些内容发生更改,则必须保存该数据的文件。这就是为什么这么多数据有这么多文件的原因。数据也经过大量处理,因此无法将所有数据聚集在一起,因为微小的更改会导致无缘无故地保存大量数据。这些文件已经包含了足够多的内容,以至于保存一个文件对于仅进行很小的更改来说几乎是多余的。

当然有一种方法可以避免文件大小的这种荒谬扩展,并且仍然保持我们已经实现的可访问性和节省效率。我们需要一种方法将这些文件打包成 Windows 认为是单个文件的方式,但这样我们就不必在某些内容发生变化时重写整个文件。

我知道拥有数以千计的小文件很奇怪,但对于我们的目的而言,它大大提高了性能。如果完全可以避免,我们只是不想为另一种资源牺牲一种资源。

注意:这些文件有 RLE 二进制数据,它们不是文本文件。

清晰度更新:5mb->3gb = 250mb(50x 簇)->150gb = 问题!

最佳答案

数据库完全可以满足您的需求:您可以存储任意数量的微小行/blob,并且它们将得到高效存储。文件系统通常每个文件至少需要一个磁盘簇,这可能就是您的大小扩展如此之多的原因。数据库不这样做。您还可以要求数据库自行压缩。

有嵌入式和独立的数据库可用。

关于c# - 多个小文件的磁盘大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15187706/

相关文章:

c# - .net 中的存储库模式和继承

windows - Vagrant 错误 : Unable to Mount VirtualBox Shared Folders (Guest Additions, vboxsf)

amazon-ec2 - EC2 磁盘空间不足

c# - 二叉树后序遍历,非递归,无节点标志

c# - 在 C# 中解压缩 JPEG 图像的最快方法是什么

c# - 在 C# 中使用 Word Interop 中的 TCSCConverter

linux -/dev/zero还是安全删除?

c++ - 您能推荐一款适合新手的有趣的驱动程序应用程序吗?

windows - 错误 : Flutter plugin not installed; this adds Flutter specific functionality

c++ - 如何使用 C++ 列出连接到 Linux 机器的硬盘?