草庐IT

c# - 记录和恢复应用程序状态以快速启动 .NET 应用程序

我正在使用一个需要很长时间才能启动和初始化的开源.NET应用程序。它创建了数千个对象并将它们配置为首次使用。我正在尝试改进此启动时间。有没有办法使用WindowsAPI或类似工具捕获应用程序内存,然后在重启PC后快速“恢复”此状态?本质上是否有一种方法可以访问和保存.NET应用程序的底层内存并让CLR在以后“吸收”该内存?最简单的方法是使用WindowsHibernate创建“hiberfile.sys”,然后保存此文件的副本(如果可能的话)。每次Windows启动时,您都会用保存的“干净”版本覆盖现有的休眠文件,以供下次启动。这确保您可以保存/恢复应用程序状态,而无需处理内存、指针和

Windows内核内存保护

Windows中每个进程的高端内存(0x80000000或0xc0000000)为内核代码保留,用户代码无法访问这些内存区域,如果尝试访问将抛出访问冲突异常。我想知道内核空间是如何保护的?是通过内存分段还是通过分页?我想听听技术解释。非常感谢,迈克尔。 最佳答案 假设您正在谈论x86和x64架构。内存保护是使用分页系统实现的。x86/x64CPU上的每个页表条目都有一个位来指示它是用户页还是主管页。只有使用CPLCPL是“当前特权级别”,有时也称为Ring。Windows仅使用两个环,尽管CPU实现了4个环。环0是Windows称为

c++ - 如何确定 C++ 应用程序中可用 RAM 的数量?

我想确定特定时刻的空闲RAM量,以便让用户知道特定操作是否可行,具体取决于是否有必要的RAM量可用。编辑:我找到了this.但正如Travis所说,它是分页和RAM的某种混合体。我只想知道可用的RAM内存。其次,如果没有必要的RAM,我想了解如何在Windows中使用分页。谢谢。 最佳答案 关于分页:如果在Windows中启用,分页将自动执行。无需更改代码即可使用。关于空闲内存:Win32/MFC:Howtofindfreememory(RAM)available?您也可以尝试申请内存。如果成功,则可以执行操作。如果您无论如何都要使

Windows 内存管理 : check if a page is in memory

在Windows中,有没有办法检查页面是在内存中还是在磁盘(交换空间)中?我想知道这一点的原因是,如果页面在磁盘中,则通过不访问该页面来避免导致页面错误。 最佳答案 据我所知,没有记录在案的方法可以在用户模式下完成此操作。也就是说,可以在内核模式下确定这一点,但这将涉及检查属于内存管理器的页表条目——这不是您在任何类型的生产代码中真正不想做的事情.您要解决的真正问题是什么? 关于Windows内存管理:checkifapageisinmemory,我们在StackOverflow上找到一

python - 退出应用程序时如何终止 python.exe*32 进程?

我在Windows7下使用wxpythonGUI编写了一个python(2.7)应用程序。当我运行该应用程序时,我看到一个python.exe*32进程在任务管理器中启动。当我退出应用程序时(使用wxpython的Window.Close()方法关闭GUI窗口),python.exe*32进程仍然存在。当我再次运行该应用程序时,第二个python.exe*32进程启动,并继续运行。每个python.exe*32进程占用大约180MB内存,这会降低计算机速度。我以这种方式启动我的应用程序:if__name__=="__main__":app=wx.App(False)frame=Main

windows - Hyper-V WMI 类的哪些属性可以访问内存信息

我想使用Hyper-VWMI类获取虚拟机的内存。有4个内存等级;但我找不到它们的任何属性来获取内存值。Msvm_Memory类具有BlockSize和NumberOfBlocks属性。当我将它们相乘时,我无法得到正确的内存。关于https://msdn.microsoft.com/en-us/library/hh850175(v=vs.85).aspx这已经是错误的做法。BlockSizeDatatype:uint64Accesstype:Read-onlyThesize,inbytes,oftheblocksthatformthestorageextent.Ifvariableblo

windows - 在 32 位 Windows 上,一个程序如何具有高虚拟字节数而私有(private)字节数相对较低?

我试图更好地了解32位Windows如何计算程序的虚拟字节。我的印象是,虚拟字节(VB)是对使用了多少用户地址空间的度量,而私有(private)字节(PB)是对系统上实际提交和保留内存的度量。特别是,我有一个我正在监视的服务器程序,当它在大量使用时,它会爬升到VB的3GB限制。大约在同一时间,PB也攀升,但随后随着使用量下降而迅速下降至1GB左右。然后,PB倾向于保持在1GB左右的低位,但VB保持在3GB左右。我无权访问源代码,所以我只是使用基本的Windows性能计数器来监视所有这些。从编程的角度来看,我不明白什么内存概念使这一切成为可能?是否有很好的引用来了解更多相关信息?

windows - 在 Windows 应用程序中不释放内存的影响?

我有一个MFCC++应用程序,它通常在系统托盘中持续运行。它在内存中分配了一个非常广泛的对象树,当应用程序需要关闭时,这会导致应用程序需要几秒钟才能释放。我的所有对象都是使用new分配的,通​​常使用delete释放。如果我只是跳过删除所有的对象,为了更快地退出,如果有的话会有什么影响?Windows是否意识到进程已死并自动回收内存?我知道不释放分配的内存几乎是亵渎神明,但我想我会问问其他人的想法。应用程序仅在用户系统关闭或用户选择自行关闭程序时关闭。 最佳答案 当进程终止时,系统将回收所有资源。这包括释放内核对象的打开句柄和分配的

c++ - Windows 虚拟内存和内核模式

我知道在32位架构中,内核模式虚拟内存映射在0x80000000和0xFFFFFFFF之间。它包含一些结构如EPROCESS,ETHREAD...等等,还有当前进程的页面目录和表。虽然尝试获取某个函数的虚拟地址是ntoskrnl让我们说“nt!NtReadFile”,但我发现它映射到内核虚拟地址0x89421130中。我尝试用随机指令在RET之后修补一些nop,当切换到另一个进程上下文时,我发现我输入的指令仍然存在。这是否意味着加载Ntoskrnl的虚拟内存在每个进程虚拟地址空间中保持不变?谢谢。 最佳答案 Doesthatmean

windows - 从用户模式访问内核内存 (Windows)

我正在编写一个需要分配非分页内存池的驱动程序,出于性能考虑,该内存必须可以直接从用户模式程序访问。在驱动程序条目中,我用这两种方法分配了一些内存:pMdl=IoAllocateMdl(NULL,4096,FALSE,FALSE,NULL);if(!pMdl){DbgPrintEx(DPFLTR_IHVVIDEO_ID,DPFLTR_INFO_LEVEL,"ErroronIoAllocateMdl.Returningfromdriverearly.\n");returnSTATUS_INSUFFICIENT_RESOURCES;}MmBuildMdlForNonPagedPool(pMd