擅长:python、mysql、java
<p>注意XP只会以较小的增量增加交换。如果您的程序突然尝试使用更多的内存,并且没有足够的交换空间,那么您将得到内存错误。在</p>
<p>SQLite可以很好地处理大小达1GB的blob,您通常可以使用2GB。但是,在32位进程中,地址空间将用尽。在</p>
<p>对于较大的项目,通常建议您将大数据存储在文件中,然后将文件名存储在数据库中,但这对您来说需要做更多的工作。在</p>
<p>您可以通过执行以下操作来解决当前的问题:</p>
<ul>
<li><p>切换到使用64位。微软以150美元(市价130美元)出售一款Windows7家庭软件包,其中包括3个XP/Vista实例的升级,这样你就可以升级几台机器了。你可以用这种方法从32位XP切换到64位win7。即使不更改RAM等的数量,这样做也会立即解决问题。</p></li>
<li><p>向pickle调用添加-1,该调用告诉它使用最新的pickle协议,该协议使用二进制而不是ascii默认编码。因此,您将获得较少的数据。有关协议版本以及哪些Python版本支持它们,请阅读文档。</p></li>
<li><p>同时压缩pickled数据-例如bz2.compress(泡菜、垃圾(目标,-1)</p></li>
</ul>
<p>这里出现问题的最可能原因是地址空间不足。一个32位的进程通常只能同时处理2GB的数据,而各种可执行文件和共享库、每个线程的堆栈、SQLite缓存等也会从该空间中减去。您将需要仔细注意您拥有的所有不同的数据项,以及它们何时处于活动状态。打电话给德尔和gc.收集()当您主动完成这些操作时,将有助于减少正在使用的并发数据量。在</p>