- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
!gch-6ren">
我正在尝试调查一个非常严重的软件崩溃,它可能与托管堆损坏有关(因为它发生在垃圾收集期间)。将 WinDbg 与 (SOS) !gchandles 命令一起使用,我得到类似的东西
0:000> !gchandles
GC Handle Statistics:
Strong Handles: 259
Pinned Handles: 137
Async Pinned Handles: 1
Ref Count Handles: 79
Weak Long Handles: 197
Weak Short Handles: 650
Other Handles: 0
Statistics:
我很好奇,“普通”固定句柄和“异步固定”句柄有什么区别?我能找到我的哪一个句柄是“异步”句柄吗?我在网上找不到任何关于它的信息,因为当这个计数器正好是一个时,应用程序似乎总是崩溃,这可能与崩溃有关。但话又说回来,它可能只是垃圾收集期间使用的一些内部东西。
最佳答案
异步固定句柄与 Windows 中的重叠 I/O 密切相关。它支持使用 OVERLAPPED 参数使用 ReadFile 和 WriteFile 进行异步读写。设备驱动程序存储传递的缓冲区指针并直接从缓冲区读取/写入缓冲区,完全与程序操作异步。托管包装器方法是 BeginRead 和 BeginWrite。
如果缓冲区是在 GC 堆中分配的,那么它需要被固定,直到驱动程序完成使用缓冲区。让 GC 在驱动程序处理 I/O 传输时移动缓冲区是灾难性的,写入会产生垃圾,读取会破坏 GC 堆,需要固定以防止缓冲区在移动时被移动驱动程序正在使用它。
固定对象非常不愉快,当垃圾收集器压缩堆时,它们让垃圾收集器很难绕过路上的石头。这里有一个必要的缺点,唯一可能取得成功的方法是尽可能短地固定缓冲区。
异步固定句柄经过特殊标记,以允许 CLR 在 I/O 完成时自动取消固定缓冲区。尽可能快,当 I/O 完成端口发出完成信号时,因此不必等待客户端代码执行回调并取消固定缓冲区。当有很多线程池线程在运行时,这可能需要一段时间。这是一种微观优化,当您有一个处理数万个客户端请求的 Web 服务器时,它往往会变成宏观优化。
它仅用于 System.Threading.OverlappedData 类型的对象,这是 mscorlib.dll 中的一个内部类,CLR 对其有特殊了解,并且是 Windows api 函数使用的 native OVERLAPPED 结构的托管传真。
长话短说,如果您在崩溃时看到句柄计数为 1,您真正知道的是有一个重叠的 I/O 未决。让任何 native 代码与 gc 分配的未固定缓冲区重叠 I/O 确实是销毁堆的好方法。顺便说一句,你有相当多的固定句柄。
关于c# - 什么是 "Async Pinned Handle"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28987642/
我正在使用 - (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id ) annotation{ 为自定义图钉
试图了解Box::pin()和Pin::new_unchecked()之间的区别。假设以下代码: use std::pin::Pin; use std::marker::PhantomPinned;
我有最新版本的 Intel Pin 3.0 版本 76887。 我有一个支持 MPX 的玩具示例: #include int g[10]; int main(int argc, char **arg
我正在寻找一种算法来创建类似于预付费电话卡的安全唯一随机数。我确实看过Generating a unique 15 digite Pin code from a 10digit number但它确实让
作为Hans Passant wishes这是我的场景。我有一个混合模式应用程序,其中 native 代码完成所有艰苦的工作,同时尊重性能,托管代码仅负责 GUI。用户也将通过编写他们专有的 C# 代
我正在尝试解决一个我不确定如何解决的问题。在我的应用程序中,本地图套件启动时,我会在用户的当前位置放置一个图钉。 Mapkit 委托(delegate)给 viewForAnnotation,它设置了
我在 android 应用程序中集成了 admob,我达到了阈值。它会显示一条消息,您的付款目前处于暂停状态,因为您尚未验证您的地址 有什么方法可以避免等待数周才能从 admob 收到用于地址验证的
我正在使用 get_user_pages在 Linux 内核驱动程序中,为了 [硬件] DMA 固定内存。一切似乎都很好 - 但我很难证明“固定”正在做正确的事情。 当我在做 get_user_pag
在使用 MKMapView 时,我确实注意到了 IOS 11 上的一个问题。 当我想从图钉对话框中点击按钮 Action 并且按钮 Action 后面有另一个图钉时,它没有得到手势。 应该是zPosi
我是 PIN 工具的新手。我只是尝试运行自述文件中给出的示例代码。 最初我使用以下方式构建: $ cd source/tools/ManualExamples $ make all 它正确编译并创建了
我遇到一个小问题...我有自己的网站,带有一个简单的 mysqli 登录脚本,每当我输入用户名、密码和 PIN 码时,它都会让我登录... 我现在的问题是,我可以仅使用用户名和密码登录我的网站(无需输
我有一个显示现金点位置的 map View 。注释被删除,可以单击标注以转到包含有关该位置的更多详细信息的页面。提款机分为免费和付费两种,免费的提款机别针是绿色的,另一个是红色的。当别针掉落时,它们就
我正在构建一个带有 GSM 调制解调器和 SIM 卡的设备。我想用别针保护 SIM 卡,以防止在现场安装设备时误用。 将关联 SIM 卡的 PIN 码存储到每个设备中会很麻烦。此外,如果更换 SIM
我正在编写一个需要共享流所有权的流适配器。 将流(私下)存储在 Pin>> 中是否正确? ? 如何调用poll_next(self: Pin在流? 最佳答案 Mutex没有所谓的结构钉扎,这在 std
我对 Pin 的要求感到困惑那个 a value, once pinned, must remain pinned forever. 我看到了the discussion thread on redd
我目前正在实现 TrustKit framework在我的 iOS 应用程序中为 SSL 连接启用 SPKI 固定。我偶然发现了正确配置 TrustKit 所必需的“备用密码”。不幸的是,API 文档
在 rust 中学习 Pin 的实现时我很困惑。 我知道当一个类型不能安全移动时,它可以实现 !Unpin。 Pin 是为了防止别人从这些类型中获取到&mut T,使他们不能是std::mem::sw
我用的是 SIM868 模块,我用的是我常用的 SIM 卡,没有问题,但现在我买了一张新的 SIM 卡,没有 pin。我需要添加 PIN 码以提高安全性。 我使用以下命令检查了它是否没有启用 PIN:
我想知道是否可以在自定义 MKMapView 中创建 MKPinAnnotation,它可以像 map 应用程序中的“Drop Pin”注释一样响应触摸和拖动。 我想要一种在 GPS 给出的位置放置图
我正在开发一个应用程序,我需要通过为用户设置密码/密码/密码来设置安全功能,以便每当他们从后台打开应用程序时,应用程序都会要求输入密码/密码/密码。我阅读了一些文章/解决方案,例如 this但他们没有
我是一名优秀的程序员,十分优秀!