问题标签 [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.
sql - 如果地址空间是连续的,对 IDENTITY 列的查找会更快吗?
如果我有一个带有IDENTITY列 ( bigint) 的非常大的表,并且该表可能会被删除,地址空间(可用 ID)的碎片是否会导致速度变慢SELECTS?
澄清:
地址空间碎片是指在 ID 列中的值中留下的空白,而不是从表中删除行时发生的磁盘碎片。
algorithm - 伙伴记忆系统中最坏情况的外部碎片
不幸的是,我在(二进制)伙伴内存系统中找不到任何可免费获得的文本,其中估计最坏情况(外部)碎片开销。我只发现了类似 M(1+lg2 m) 的东西,没有任何证据。这个表达式估计(?)一个伙伴堆大小,保证分配大小为 M 的总内存(m 是最长的分配块)。至少对于 m=2,这个估计似乎太粗略了;证明也会很有趣。
对于有关此问题的任何解释或链接,我将不胜感激。
c# - 在大对象堆内存中预分配一些内存
我正在开发一个 C# 应用程序,这个应用程序正面临内存紧缩,因为许多对象在大对象堆中获得内存分配。
我的 C# 应用程序必须处理许多大文件(作为字符串对象),因此此字符串类型对象的内存会从大对象堆中一次又一次地分配(从而导致 LOH 碎片)。
由于 string 是一个不可变对象,因此 LOH 中的新内存总是分配给该对象。我的问题是,有没有办法,我可以在大对象堆中预先分配一些内存,并始终为字符串对象分配相同的内存。
这是更详细的事情:正如我所提到的,我正在处理这些大文件。要进行处理,我必须将其转换为字符串。即使我使用 stringBuilder,它也不会有太大帮助,因为一旦我将它转换为字符串,就会在 LOH 中为此分配一个单独的内存。
所以,我期待在内存中分配一堆,比如说 100 KB,每当我读取一个新文件并将其转换为字符串时,这 100 KB 就会被分配。
vb.net - 对象数组到字节数组 - Marshal.AllocHGlobal Fragmentation 查询
我认为在这个 2 岁的帖子中对Fredrik Mörk的回答发表评论是不公平的,所以我想我只是把它作为一个新问题来问......
注意: 这绝不是对答案的批评,我只是想在深入研究内存管理/元帅类之前了解这一切。
在该答案中,函数GetByteArray在循环中为给定数组中的每个对象分配内存。
上述帖子中的 GetByteArray 函数是否会从为所提供数组的总大小分配内存中受益:
我只是想知道分配内存是否会导致任何类型的碎片,如答案所示?假设可能存在碎片化,会产生很大的影响吗?以我展示的方式分配内存会迫使您调用 IntPtr.ToInt## 以从整体分配指针中获取指针偏移量,因此会迫使您检查底层架构以确保使用正确的方法*1或有更好的方法吗?(ToInt32/ToInt64 取决于 x86/64?)
*1 我在别处读到调用错误的 IntPtr.ToInt## 会导致溢出异常。我的意思是我会使用:
我已经阅读了几篇关于 VB.Net Marshal 类和内存分配的文章;下面列出了,但如果你知道任何其他好的文章,我会全神贯注!
http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.aspx
http://www.dotnetbips.com/articles/44bad06d-3662-41d3-b712-b45546cd8fa8.aspx
到目前为止我最喜欢的:http: //www.codeproject.com/KB/vb/Marshal.aspx
android - “需要 411 长度” - 来自 Google Docs Api 使用 Android API 10 及更低版本的响应
我正在为 Android 设备开发一个应用程序,其中一部分是启用用户 Google Docs 和设备存储之间的下载和上传。我遇到的问题是我在不同版本的 Android API 之间得到了不同的行为。我一直在 API lvl 10 (Android 2.3.3) 上进行大部分开发。虚拟设备上没有问题(我没有使用此 API lvl 或更高级别测试的真实设备)。在 API lvl 8 (2.2.x) 及以下的设备和模拟器上,当请求启动可恢复的上传会话时,我遇到了来自 Google Docs Api 的 411 Length required 错误。在 API lvl 10 的模拟器上运行相同的应用程序时不会发生这种情况。
我正在使用 Eclipse 进行开发,并使用 Google API Java Client 1.4.1-beta 与 Docs Api 进行通信。我为 Google Docs API 遵循的文档在这里:http ://code.google.com/apis/documents/docs/3.0/developers_guide_protocol.html
根据上述文档,启动可恢复的上传会话是发送一个空的 POST 请求。对于用户 Google Docs 的“根”,地址是“ https://docs.google.com/feeds/upload/create-session/default/private/full ”。这就是我为(空体)请求设置标头的方式:
我还应该提到,我用于 HTTP 的库如下:
我做了一些数据包嗅探以实际看到标头,你瞧,在不同版本的 Android 上,标头实际上设置的方式不同。如果您注意到,默认情况下应该使用 https 发送请求,因此我将其更改为使用 http 来查看数据包的标头。结果如下:
使用 Android API lvl 10 的模拟器:
使用 API lvl 7 的模拟器:
注意缺少内容长度标头,情况也不同。这解释了为什么我得到 411 响应,但是如何解决这个问题?显然,我的目标是在所有设备上获得相同的行为(由于与此问题无关的原因,不包括具有 Android 1.x 的设备),最好不使用特定于版本的代码。
老实说,我想不出可以在我的代码中应用的许多合适的解决方案。我唯一能想到的:
使用 API 中的(已弃用)方法以不同方式设置标头,但无济于事。请求中的实际标头仍然相同。
使用“0”或 Integer.toString(0) 设置属性也没有什么区别(显然,我在这里有点绝望)。
因此,非常欢迎任何旨在寻找解决方案的帮助或建议。如果特别要求,我将提供更多代码,并且可以通过数据包嗅探来测试不同的解决方案。这也很有可能是 Google Api Java 客户端或 Android 中的错误。但是哪一个?如果没有找到解决方案,我对 Android 的了解不够深入,无法弄清楚在哪里报告这个(疑似)错误。因此,如果您怀疑罪魁祸首确实不是我的代码,那么请分享您对哪个组件导致标题以不同方式设置的想法。
编辑 - 算法要求堆栈跟踪,这里是: http: //pastebin.com/yDCCLB2P
编辑 - 我正在为内容设置一个 mimetype,尽管正文是空的。我尝试删除内容类型标头,没有任何改进。该行现在在上面的代码中被注释掉了。
编辑 - 我一直在尝试解决这个问题。这是尝试在同一代码中以两种不同方式设置标头时的堆栈跟踪:http: //pastebin.com/NkmFjYB3
当同时使用时,它们会相互碰撞。删除任何一个都将产生与以前类似的结果(Docs 中需要 411 长度,并且在请求中不存在 content-length)。使用其中一种方式和不推荐使用的方式( transport.defaultHeaders.contentLength = "0"; )创建请求时,不会发生冲突(或不会出现在堆栈跟踪中)。使用上述任何方法的任意组合,要么存在双标头冲突,要么请求没有内容长度。
c++ - 关于内存池的问题
我需要对内存池的概念和实现进行一些说明。
通过wiki上的内存池,它说
也称为固定大小块分配,...,因为这些实现由于块大小可变而遭受碎片,由于性能原因,不可能在实时系统中使用它们。
“可变块大小导致碎片”如何发生?固定大小的分配如何解决这个问题?这个 wiki 描述对我来说听起来有点误导。我认为固定大小的分配或可变大小无法避免碎片。在内存池上下文中,通过为特定应用程序设计的特定内存分配器可以避免碎片,或者通过限制使用预期的内存块来减少碎片。
同样通过几个实现示例,例如Code Sample 1和Code Sample 2,在我看来,要使用内存池,开发人员必须非常了解数据类型,然后将数据切割、拆分或组织到链接的内存中块(如果数据接近链表)或分层链接块(如果数据更分层组织,如文件)。此外,似乎开发人员必须事先预测他需要多少内存。
好吧,我可以想象这对于一组原始数据很有效。内存模型不那么明显的 C++ 非原始数据类呢?即使对于原始数据,开发人员是否应该考虑数据类型对齐?
是否有适用于 C 和 C++ 的良好内存池库?
感谢您的任何评论!
android - SD 卡状态术语
我们开发了一个依赖于访问 SD 卡上特定目录的 Android 程序。我们的程序会检测手机是否可以使用 SD 卡,如果不可用,则会向用户显示错误消息。触发此错误的最常见用例是将设备插入计算机并将 SD 卡安装到计算机上。
我们正在处理错误消息,它将指示用户确保 SD 卡可用于手机。
不幸的是,对于 SD 卡是否可用于手机以及如何安装/卸载它,似乎每个手机制造商都有自己的术语。例如,(一些?)三星设备显示带有安装/卸载按钮的屏幕。HTC Thunderbolt 有一个菜单,其中一个选项是“仅充电”。摩托罗拉设备似乎分为类似于三星的行为和类似 HTC Thunderbolt 的行为。XOOM 是它自己的装置。
所以,两个问题:
是否有一个通用的正确术语可以向用户传达他们应该使 SD 卡对设备可用而不是对计算机可用?
如果没有一个好的通用术语,有没有办法确定我们正在运行哪种设备并根据特定设备的术语调整我们的错误消息?
multicast - Zigbee pro:发送涉及分段的多播
好的,我们对涉及 Zigbee PRO 和协议接口集群的未来项目进行一些头脑风暴。类似于在 zigbee 网络中隧道协议(bacnet)。
在 bacnet 中,有单播(一个目标)和广播(多个目标)帧。两个帧都在 bacnet 网络上传输,它们需要在 zigbee 网络中进行隧道传输。
bacnet 单播 ==> zigbee 单播。bacnet 广播 ==> zigbee 多播。
当 bacnet 有效负载 > zigbee 有效负载时,根据 zigbee 有效负载也涉及 Zigbee 分片(帧被分解成更小的帧)。
但是 zigbee 分片不能用于多播帧(zigbee 规范)...!
解决该问题的最佳方法是什么?我可以通过在所有 zigbee 设备之间创建绑定来绕过这个吗?
谢谢
android - Sidekick 4G 上的 Android Stackoverflow 错误
我的一个布局显然抛出了stackoverflow错误,如下所示
我的布局是这样的
换句话说,它就像 ScrollView 作为 Layout Container ,RelativeLayout 作为它的子元素,6 个 (TextView+Seekbar) 对作为 RelativeLayout 的子元素
现在布局在 99% 的手机上运行良好,但仅在 SideKick 4G 设备上抛出 Stackoverflow 错误。我没有 SideKick 4G 设备,所以我无法真正测试可能是什么问题。所以任何人都可以给我关于可能是什么问题的线索。
sql-server - SQL Server:12% 的索引扫描密度和 50% 的碎片。“坏”有多坏?
多少碎片是坏的?扫描密度有多低才算过低?扫描密度有多低是坏的?
我有一个具有以下索引密度和碎片级别的表:
您可以看到我刚刚进行了碎片整理TransactionEntries17,这就是为什么它的扫描密度如此之高,而它的碎片如此之低的原因。
但是 12% 的扫描密度是不是太低了?48% 的碎片率高得可怕吗?
删除行(需要索引扫描)时出现性能问题。索引碎片是70000 页索引上的巨大闪烁红色警报,还是可能但不太可能的原因?
从 SQL Server BOL:
扫描密度 [最佳计数:实际计数]
是一个百分比。它是Best Count与Actual Count的比率。如果一切都是连续的,则该值为 100;如果该值小于 100,则存在一些碎片。
如果所有内容都是连续链接的,则最佳计数是范围更改的理想数量。实际计数是范围更改的实际数量。
逻辑碎片
通过扫描索引的叶页返回的乱序页的百分比。这个数字与堆无关。乱序页是指分配给索引的下一个物理页不是当前叶页中的下一页指针所指向的页。
但是没有关于什么水平的碎片太高,应该降低的指导。也没有任何关于什么扫描密度太低的指导,应该增加。