问题标签 [fragmentation]
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.
c# - 为什么大对象堆会增长而不是抛出异常?
在上一个问题中,我询问了最大化 LOH 上可分配的最大块的可能编程方法。我仍然看到问题,但现在我试图弄清楚为什么 LOH 的大小似乎会增长和缩小,但我仍然看到 OutOfMemoryExceptions 与其他人报告的由于 LOH 碎片化的情况相符.
为什么一个调用,例如,StringBuilder.EnsureCapacity 会为我抛出一个 OutOfMemoryException,但是从其他地方调用另一个会导致 LOH 的大小扩大(根据性能计数器,它正在增长和缩小)?
memory - 内存碎片@boost::asio?
我几乎被一个我从未得到答案的问题所困扰,这个问题解决了一个极其重要的问题;boost::asio 的内存碎片。
在文档中也没有在 SO 中找到任何东西。
boost::asio 的异步函数,例如 async_write() 和 async_read_some()总是分配一些东西。(在我的情况下,分别是 144 和 96 字节,在 VC9 调试版本中)。
我怎么知道呢?
我将客户端连接到该库提供的“回声服务器”示例。
我在“operator new(size_t size)”的代码中的“new.cpp”处设置了一个断点。
然后我发送“123”。断点被击中!
现在使用堆栈跟踪,我可以清楚地看到“新”调用的根来自我在函数处理程序中进行的 async_write() 和 async_read_some() 调用。
所以内存碎片迟早会出现,因此我不能使用ASIO,但我希望我可以!
我想指出,我了解异步操作至少在 IOCP 需要在操作期间使用分配的结构,直到完成(调用处理程序时)。
例如,对于 IOCP,每个操作(读/写)都必须有一个 OVERLAPPED 结构。
我怀疑这就是我有上述小分配的原因,谁让我担心内存碎片。
那我该如何汇集这些结构呢?当然是平台无关的。
任何的想法?任何有用的代码示例?我相信你们中的一些人已经解决了这个问题。
function - 何时将代码拆分为函数的黄金法则是什么?
将代码拆分为函数和类以实现模块化/解耦是很好的,但如果你这样做太多,你会得到非常碎片化的代码,这也不好。
何时将代码拆分为函数的黄金法则是什么?
android - 由于 Android 碎片化而付出的努力
在 Android 平台碎片化的情况下,不同 OEM 手机属性的哪些变化迫使开发者从一个平台移植到另一个平台?
sql-server - 这种场景下如何避免sql server页面碎片?
我想将 SQL 插入排序到表中,以通过尽可能避免碎片来优化页面使用。我将运行一个 .net Windows 服务,它每 2 小时会从数据库中获取一些数据并针对未来的查询对其进行优化。涉及 varchar(6000) 列,但我估计它很少会超过 4000 字节。实际上,此列通常可以在 600 和 2400 之间变化。6000 有助于避免截断错误。我仍然可以通过.net 控制该列的大小。永远不会有更新或删除。只需选择(每 2 小时插入一次)。每 2 小时将有大约 1000 个插入。
我使用的是 Sql Server 2005。据说页面大小为 8096 字节。我需要在表中插入行。考虑到行的大小,一个页面可以容纳 4 到 12 行。
因此,我将从.net 中读取数据库中的数据,将其存储在内存中(也许使用一些聚类算法?),然后插入大约 1000 行。
我想知道在这种情况下是否有办法避免或最小化页面碎片。
sql - 高度碎片化的索引 - SQL Server 2005
我最近继承了一个维护不善的生产数据库,其中包含大量碎片化的索引(大多数索引碎片化率超过 80%)。我向我的经理请求停机以执行索引重建,但不幸的是,目前不允许停机。如果在线索引重组也不是选项,我可以执行以下操作吗?
- 将新的生产副本还原到测试实例
- 重建索引,更新统计信息
- 从测试实例覆盖产品数据库
- 应用事务日志来获取数据库。
虽然上述方法也需要停机时间,但相对较少。我想知道是否有人可以做到这一点,或者我只是愚蠢:)请指教
RK
sql-server - 在不添加/删除聚集索引的情况下减少 SQL Server 表碎片?
我有一个大型数据库(90GB 数据,70GB 索引),在过去的一年里一直在缓慢增长,增长/变化不仅导致了索引的大量内部碎片,还导致了表本身的大量内部碎片。
解决(大量)非常碎片化的索引很容易——REORGANIZE 或 REBUILD 会处理这个问题,这取决于它们的碎片程度——但我能找到的关于清理实际表碎片的唯一建议是添加一个聚集索引到桌子上。之后我会立即删除它,因为我不希望表上的聚集索引继续前进,但是在没有聚集索引的情况下还有另一种方法吗?执行此操作的“DBCC”命令?
谢谢你的帮助。
c++ - 什么是内存碎片?
我听说过在 C++ 动态内存分配的上下文中多次使用“内存碎片”这个术语。我发现了一些关于如何处理内存碎片的问题,但找不到处理它本身的直接问题。所以:
- 什么是内存碎片?
- 如何判断内存碎片是否是我的应用程序的问题?什么样的程序最容易受到影响?
- 处理内存碎片的常用方法有哪些?
还:
- 我听说大量使用动态分配会增加内存碎片。这是真的?在 C++ 的上下文中,我了解所有标准容器(std::string、std::vector 等)都使用动态内存分配。如果在整个程序中使用这些(尤其是 std::string),内存碎片是否更有可能成为问题?
- 如何在 STL 繁重的应用程序中处理内存碎片?
sql - 修改任何行数据是否会使我的聚集索引产生碎片?
我现在明白聚集索引包含所有行数据,而不仅仅是索引字段。我试图了解这对碎片化的影响。
假设我们有一个这样的表:
现在假设所有这些行都充满了数据,然后在聚集索引中的一些较早的行上,您突然将 Field1、Field2、Field3 和 Binary 设置为空。
正如我以我相当幼稚的方式认为的那样,这其中的一个含义是,清除所有这些值会产生差距,索引会变得支离破碎。我猜这些行的顺序仍然正确,那真的是索引碎片吗?
或者你可以换个角度想;如果它们一开始都是空的并且您插入数据,那么您最终是否不得不将数据洗牌到不同的页面并获得索引碎片?
此外,我知道 LOB 数据存储在单独的分配单元中,尽管我不确定这意味着什么;这是否意味着将 Binary 设置为 null (或填充它)应该对聚集索引碎片没有影响?
android - Android 1.5 和 Android 1.6 之间的海量存储 API 发生了哪些变化
不久前,我写了一些代码来将图像保存在 SD 卡上。现在我将 targetSDKVersion 添加到我的清单中,现在我的文件保存代码停止工作。
我可以通过从我的清单中删除 targetSdkVersion 来重现它,我的应用程序不会向 SD 卡写入任何内容。
Android 1.5 和 1.6 之间的 API 更改是否会阻止我写入 SD 卡?
这是将位图压缩到 SD 卡的测试代码。使用以下清单条目,它不起作用:
我得到以下异常:
09-27 11:35:58.689:错误/ImageSaver(8672):找不到文件 09-27 11:35:58.689:错误/ImageSaver(8672):java.io.FileNotFoundException:/sdcard/FOLDER/1285580158662.png
删除 targetSdkVersion 使其再次在所有平台上运行。
如何使代码使用 targetSdkVersion 集运行?