问题标签 [defragmentation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1040 浏览

algorithm - 什么是压缩被阻止文件中记录的好算法?

假设您有一个由一堆固定大小的块组成的大文件。这些块中的每一个都包含一些可变大小的记录。每条记录必须完全适合单个块,然后根据定义,这些记录永远不会大于完整块。随着时间的推移,记录在这些块中添加和删除,因为记录来自这个“数据库”。

在某些时候,尤其是在可能将许多记录添加到数据库并删除了一些记录之后 - 许多块可能最终只被部分填充。

什么是一个好的算法来打乱这个数据库中的记录,通过更好地填充部分填充的块来压缩文件末尾不必要的块?

算法要求:

  • 必须在原始文件的位置进行压缩,而不是暂时将文件从其起始大小最多扩展几个块
  • 该算法不应不必要地干扰已经基本满的块
  • 必须一次从文件读取或写入整个块,并且应该假设写入操作相对昂贵
  • 如果记录从一个块移动到另一个块,则必须在从其起始位置删除之前将它们添加到新位置,以便在操作中断时不会因“失败”压缩而丢失记录。(假设这种记录的临时重复可以在恢复时检测到)。
  • 可用于此操作的内存可能只有几个块的数量级,这仅占整个文件大小的很小百分比
  • 假设记录大约为 10 字节到 1K 字节,平均大小可能为 100 字节。固定大小的块大约为 4K 或 8K,文件大约为 1000 个块。
0 投票
4 回答
1940 浏览

windows - Windows 磁盘分区间隙

Windows XP 磁盘碎片整理程序报告显示了我系统上许多磁盘分区上的磁盘使用率的持续差距。我不是指发生的短暂的小差距。在下面的磁盘 D 中,有问题的间隙是“碎片整理”一词下的间隙。在下面的磁盘 P 中,差距是“def 之前的使用”下的差距,但差距更大。C 分区没有这个异常。大小和放置模式并不明显。就好像有一个区域,一个无人区,文件系统和碎片整理程序都避开了。这些差距在日常使用和碎片整理中仍然存在。我不相信这是页面文件的残留物——无论如何,它应该显示为绿色。回收站是空的。

有任何想法吗?

磁盘 D(20 Gig): D盘

磁盘 P (40 Gig): 磁盘 P

0 投票
1 回答
1181 浏览

sql - 我应该在 SQL Server 创建的表上删除并创建索引吗?

为了摆脱重建和碎片整理留下的一些碎片,我们认为我们会删除并创建索引,所以我开始编写一个脚本。

它识别需要工作的聚集索引并删除索引和主键并重建表的索引和主键。

这是我遇到的问题:SQL Server 使用自己独特的命名系统根据统计信息创建了很多自己的索引。

问题:我只想删除和创建我们创建的索引,还是我想删除所有索引并只创建我们创建的索引,或者我们想删除所有索引,包括 SQL Server 制作的索引,并创建所有索引,包括SQL Server 制作的那些?

0 投票
5 回答
6788 浏览

c++ - 视频游戏中纹理流的 C++ 内存管理

这是一个“难”的问题。我在网上没有发现任何有趣的东西。

我正在为我的公司开发一个内存管理模块。我们为下一代游戏机(Xbox 360、PS3 和 PC……我们将 PC 视为游戏机!)开发游戏。

未来,对于我们的下一款游戏,我们需要处理无法全部加载到主机内存中的大型游戏世界的纹理流传输(暂时不讨论 PC)。

我们将在开始时流式传输纹理的高分辨率 mipmap(大约是世界数据大小的 70%)。也许将来我们还必须流式传输几何、较小的 mipmap、音频等。

我正在为这个问题开发一个内存管理器,专注于 X360(因为在 PS3 上我们可以使用主机内存和相关的自动碎片整理 GMM 分配器)。

我面临的问题如下:我们决定为纹理流式传输保留一个特定的内存区域(例如 64 兆字节),并且我们希望处理该区域中的所有分配和解除分配。我们在应用程序开始时分配了该区域,并且该区域在物理上保证是连续的(不仅仅是虚拟的,因为我们需要在那里存储纹理)。

我实现了一个自动碎片整理分配器,使用句柄而不是指针。时间不是问题,问题是内存碎片。在游戏中,我们不断地加载和卸载流目标,因此我们希望使用我们的缓冲区的最大数量(64 兆字节)。

有了这个分配器,我们可以使用所有分配的空间,但是碎片整理程序在一个不可接受的时间内工作(有时 60 毫秒,超过一帧!)而算法还不错......有太多不可避免的 memcpy!

我正在寻找解决此问题的解决方案。我想至少找到一篇好论文,或验尸报告,或遇到与我相同问题的人。

现在我在两种策略之间进行选择:1)在专用线程上移动碎片整理例程(对于具有 6 个硬件线程的 X360 来说很好,对于只有一个硬件线程的 PS3 来说很糟糕......而且不要告诉我使用 SPU!)锁定区域的所有多线程问题,访问正在移动的区域,... 2)找到碎片整理问题的“增量”解决方案:我们可以给每个帧一个时间预算(例如最多 1 毫秒)进行碎片整理并且内存管理器将在每一帧的预算中做它可以做的事情。

有人能告诉我他的经历吗?

0 投票
2 回答
1140 浏览

operating-system - 将操作系统文件移动到磁盘的开头

我想知道是否可以将给定分区上的文件移动到磁盘的开头,那里的读/写速度更快。

我目前在磁盘的第一个分区上安装了 Windows Vista,还有几个分区用于与工作相关的文件和其他内容。

这会保证操作系统分区(这是第一个创建的)位于磁盘的开头吗?

碎片整理程序会对此有所帮助,还是各种分区会限制磁盘上文件的位置?

0 投票
3 回答
19416 浏览

mysql - Mysql OPTIMIZE TABLE 用于所有碎片表

我想要OPTIMIZE所有当前碎片化的表。这些表应该有information_schema.DATA_FREE > 0.

是否可以在 SQL 中的一个命令中优化具有此属性的所有表,还是我必须编写外部代码才能做到这一点?

0 投票
5 回答
5833 浏览

c# - 磁盘碎片整理和磁盘检查中的逻辑

Windows 中磁盘碎片整理和磁盘检查背后的逻辑是什么?我可以使用 C# 编码吗?

0 投票
5 回答
4384 浏览

c++ - 对 C++ 堆分配器和 STL 进行碎片整理

我正在寻找编写一个自我碎片整理内存管理器,其中一个简单的递增堆分配器与一个简单的压缩碎片整理程序结合使用。

粗略的方案是从最低内存地址开始向上分配块,并保持簿记信息从最高内存地址开始向下工作。

内存管理器会传回智能指针——boost 的 intrusive_ptr 对簿记结构来说似乎是最明显的,然后它们本身会指向实际的内存块,从而提供一定程度的间接性,以便可以轻松地移动块。

碎片整理程序将从“生成”书签开始压缩堆以加快进程,并且一次只对固定数量的内存进行碎片整理。指向块本身的原始指针在下一次碎片整理之前一直有效,因此可以自由传递,直到提高性能为止。

对此的具体应用是控制台游戏编程,因此在每一帧的开始或结束时,可以相对安全地完成碎片整理。

所以我的问题是,是否有人将这种分配方案与 STL 结合使用,它是否会像我怀疑的那样完全摧毁 STL。我可以看到 std::list< intrusive_ptr > 在 intrusive_ptr 级别上工作,但是 stl 列表节点本身的分配是否存在以覆盖下一个/上一个指针本身是 intrusive_ptr 或者我只是必须有一个标准堆分配器与这个更动态的分配器并驾齐驱。

0 投票
1 回答
134 浏览

installation - 作为 NSIS 安装程序脚本的一部分对 Windows 驱动器进行碎片整理?

我需要安装一个包含很多文件的软件。我们的经验表明,在高度碎片化的硬盘上会导致性能非常差。所以我想在我的安装程序中包含自动磁盘碎片整理(我打算使用 NSIS 编写)。如何在安装程序中包含碎片整理命令并读取结果?

0 投票
2 回答
406 浏览

sql-server-2005 - Defragmenting SQL indexes

I have been trying to defrag indexes in SQL Server 2005 and nothing seems to work. I have created multiple Maintenance Plans using the wizard but the job always fails. I have run the script from this site, which is originally from Microsoft:

http://blog.sqlauthority.com/2008/03/04/sql-server-2005-a-simple-way-to-defragment-all-indexes-in-a-database-that-is-fragmented-above-a-declared-threshold/

Even if I go to the specific table in Object Explorer and select the Indexes folder and select Rebuild All the fragmentation % never changes, even though it reports as completing as successful.

Shouldn't a rebuilt index have 0% fragmentation? If so why would this sql not work:

This is the sql generated by selected Rebuild Index.