代码之家  ›  专栏  ›  技术社区  ›  Ram Rachum

python中的scratch磁盘?

  •  2
  • Ram Rachum  · 技术社区  · 15 年前

    我知道在某些windows xp程序中,比如photoshop,有一种叫做“scratch disks”的东西。我明白这意味着,如果我错了,请纠正我,photoshop在硬盘上管理自己的虚拟内存,而不是让windows管理它。我知道这是因为windows xp限制了进程的总内存,而不管hd空间有多大。我想大概是3 GB。到目前为止我做得对吗?

    我正在用python编写一个运行模拟的应用程序。它将占用大量内存,并将在WindowsXP上运行。它能用刮擦盘吗?怎么用?

    7 回复  |  直到 14 年前
        1
  •  4
  •   S.Lott    15 年前

    直到你真的没有记忆了,想想这是浪费时间。

    当您最终耗尽内存时,您将需要使用一个临时文件来存储进程所需但无法装入内存的对象。

    使用腌菜或架子(参见 Data Persistence )文件中的对象。如果那个文件恰好在一个名为“scratch”的磁盘上,那就太好了。

    有时出于性能原因,您希望临时文件与其他工作文件位于单独的磁盘上。在某些环境(SAN、NAS、存储阵列)中,磁盘是虚拟的,寻找“临时”磁盘没有任何性能优势。在其他环境中(即,您拥有所有硬件),您可以将临时文件放在其他驱动器上,使该驱动器成为“暂存”磁盘。

        2
  •  2
  •   Jason Baker    15 年前

    我知道这是因为windows xp限制了进程的总内存,而不管hd空间有多大。我想大概是3 GB。

    仅供参考,这更多的是32位操作系统的限制,而不是Windows XP的问题。在32位vista、linux、bsd中也会遇到同样的问题……你明白了。如果你走64位的路线,你不会有这些问题。

    例如,Windows XP x64允许 8 terabytes of memory per process .

        3
  •  1
  •   Kostas Konstantinidis    15 年前

    如果你的应用程序可以处理非常大的文件,

    是这样吗?

    如果没有,那么我认为你可能找不到对你的应用程序有益的东西。

        4
  •  1
  •   Shane C. Mason    15 年前

    Memory mapped files 可能是你要找的。python的实现允许您在内存中使用类似可变字符串的文件。

        5
  •  1
  •   Bastien Léonard    15 年前

    win32 api提供了以下功能: link text . 您可以通过pywin32使用这些函数。

        6
  •  1
  •   Jiaaro    15 年前

    您可以将s.lott关于使用pickle的答案(为了获得更好的性能,您应该使用cpickle)与sqllite结合起来。

    sqlite内置于python 2.5及更高版本中,因此您只需导入:),然后将pickled对象作为字符串存储在其中,您将拥有一个访问数据的快速方法(与构建自己的方法相比),这将有助于保持您的组织性。

    注:cpickle与使用中的pickle几乎相同。唯一的区别是它是用C写的

    有用的python文档:

    编辑 :最好有一个由用户控制的内存使用限制。当用户拥有8GB的RAM时,将一堆数据存储在磁盘上并等待缓慢的磁盘I/O是很遗憾的;)

        7
  •  0
  •   10goto10    14 年前

    你可能在找佐德这样的东西。然而,尽管zodb努力做到透明,但没有任何解决方案能够100%地消除伪影。您必须在编写代码时意识到,您的对象主要存在于数据库中,但有多个对象表示、存在缓存/同步问题等。没有什么会使这个非常困难的问题对您来说完全无关紧要。