据我所知,在某些Windows XP程序中,如Photoshop,有一种叫做“临时磁盘”的东西。我明白这意味着,如果我错了,请纠正我,是Photoshop在硬盘上管理自己的虚拟内存,而不是让Windows管理它。据我所知,造成这种情况的原因是Windows XP对进程可以占用多少内存的一些限制,无论高清空间如何。我认为它大约是3 GB。到目前为止我做得对吗?
我在Python中创建一个用于运行模拟的应用程序。它将占用大量内存,并将在Windows XP上运行。它可以使用暂存盘吗?怎么样?
答案 0 :(得分:4)
直到你实际上没有记忆力,想到这是浪费时间。
当你最终耗尽内存时,你需要使用一个临时文件来存储你的进程需要的对象,但不能适应内存。
在文件中使用pickle或shelve(请参阅Data Persistence)您的对象。如果该文件恰好位于名为“scratch”的磁盘上,那就太好了。
出于性能原因,有时您希望临时文件与其他工作文件位于不同的磁盘上。在某些环境(SAN,NAS,存储阵列)中,您的磁盘是虚拟的,并且寻找“临时”磁盘没有任何性能优势。在其他环境中(即,您拥有所有硬件),您可以将临时文件放在其他驱动器上,使该驱动器成为“临时”磁盘。
答案 1 :(得分:2)
据我所知,造成这种情况的原因是Windows XP对进程可以占用多少内存的一些限制,无论高清空间如何。我认为它大约是3 GB。
仅仅是一个FYI,这更像是32位操作系统的限制,而不是Windows XP的问题。你会在32位Vista,linux,bsd中遇到同样的问题......你明白了。如果你使用64位路由,则没有这些问题。
例如,Windows XP x64最多允许8 terabytes of memory per process。
答案 2 :(得分:1)
在适用于非常大的文件的情况下,临时磁盘将使您的应用程序受益,
是这样的吗?
如果没有,那么我认为你可能找不到一些会使你的应用程序在暂存盘中受益的东西。
答案 3 :(得分:1)
Memory mapped files可能就是你要找的东西。 Python的实现允许您在内存中使用类似可变字符串的文件。
答案 4 :(得分:1)
Win32 API提供了这个:link text。 您可以通过PyWin32使用这些功能。
答案 5 :(得分:1)
你可以结合S.Lott关于使用pickle的答案(你应该使用cPickle来获得更好的性能)和SqlLite。
sqlite内置于python 2.5及更高版本,所以你需要做的就是导入:),然后只需将pickle对象存储为字符串,你就可以有一个很好的快速访问数据的方法(比较建立自己的方法),这将有助于保持组织。
注意:cPickle几乎与使用中的泡菜完全相同。唯一的区别是它是用C语言编写的
有用的Python文档:
编辑:拥有用户控制的内存使用限制可能是个好主意。当用户拥有8GB的RAM时,将一堆数据存储在磁盘上并等待慢速磁盘I / O将是一种耻辱;)
答案 6 :(得分:0)
您可能正在寻找像ZODB这样的东西。然而,尽管ZODB努力透明,但没有任何解决方案可以100%免除工件。你必须编写你的代码,意识到你的对象主要存在于数据库中,但是对象有多种表示形式,存在缓存/同步问题等等。没有什么能够使这个非常困难的问题对你来说完全无足轻重