gpt4 book ai didi

.net - Windows 休眠如何工作

转载 作者:可可西里 更新时间:2023-11-01 13:29:03 27 4
gpt4 key购买 nike

出于好奇,我正在寻找一篇关于“Windows 休眠选项如何工作”的文章/文档,即当一个人在 Windows 关闭对话框中选择“休眠”选项时。我从一些来源得到的答复是,它只是内存和寄存器的序列化。

如果我在这里错了,请原谅我。如果 Windows 可以序列化任何应用程序、进程或对象,无论其可序列化还是不可序列化,.NET 为何将可序列化对象限制为具有 [Serializable] 属性或 ISerializable 接口(interface)的对象?

最佳答案

在进程地址空间内,一切都是字节;一些堆栈,一些托管堆等。字节固有可序列化 - 它们只是字节。 hibernate 所要做的就是挂起线程并将整个地址空间写入磁盘。

对于对象,您希望将它们保存到某个内存不足的结构中。不幸的是,存储地址等没有意义,因为它异常不太可能再水化到内存中完全相同的点。此外,许多诸如非托管对象句柄之类的东西在再水合时将毫无意义。您也极有可能只想保存一个 对象 block ,而不是整个进程空间。即使在一个小图表中,这些对象也可能散布在各处的地方 - 所以您不能只复制几页内存。

还要记住,序列化的一个常见用途是深度克隆对象;如果您依赖于对象在内存中的表示,则必须反序列化到内存中完全相同的位置 - 因此您不能克隆任何东西。这就是 *您接触压缩垃圾收集器等概念之前,它会在您不注意时在内存中四处移动对象。

还要考虑到您可能会将数据加载到不同的平台/架构中,或者想要编写特定格式(xml、json 等)。

因此,序列化代码不仅要复制原始内存,还必须查看单个对象、遍历引用并以一种允许从与以下内容完全无关的源进行再水化的方式编写对象图原始内存。更难。

关于.net - Windows 休眠如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5209942/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com