我有一个缓冲区,我需要确保我不超过一定的大小。如果我这样做,我想将缓冲区附加到文件并清空它。
我的代码:
var r = new RegionInfo(yourCultureInfo.LCID);
var flagName = r.TwoLetterISORegionName + ".gif";
然而,这种比较(import sys
MAX_BUFFER_SIZE = 4 * (1024 ** 3)
class MyBuffer(object):
b = ""
def append(self, s):
if sys.getsizeof(self.b) > MAX_BUFFER_SIZE:
#...print to file... empty buffer
self.b = ""
else:
self.b += s
buffer = MyBuffer()
for s in some_text:
buffer.append(s)
)太慢了(即没有比较,整个执行时间不到1秒,比较需要5分钟)。
目前我可以将整个sys.getsizeof(self.buffer) > MAX_BUFFER_SIZE
放到内存中,因此缓冲区实际上永远不会超过some_string
,但我必须确保我的代码也适用于大文件(大小为几TB)
编辑:
此代码运行时间不到1秒:
MAX_BUFFER_SIZE
问题是缓冲区可能会变得太大。
同样,此代码也在1秒内运行:
import sys
buffer = ""
for s in some_text:
buffer += s
#print out to file
编辑2:
抱歉,缓慢的部分实际上是附加到缓冲区,而不是我想的比较本身...当我测试代码时,我注释掉了整个import sys
MAX_BUFFER_SIZE = 4 * (1024 ** 3)
class MyBuffer(object):
b = ""
def append(self, s):
print sys.getsizeof(self.b)
buffer = MyBuffer()
for s in some_text:
buffer.append(s)
语句而不仅仅是第一部分。
因此,有没有一种有效的方法来保持缓冲区?
答案 0 :(得分:1)
根据对问题的修改取消删除并编辑我的答案。
假设比较缓慢是不正确的。事实上,比较很快。真的,真的很快。
为什么不通过使用缓冲IO来避免重新发明轮子?
可选的缓冲参数指定文件所需的缓冲区大小:0表示无缓冲,1表示行缓冲,任何其他正值表示使用(大约)该大小(以字节为单位)的缓冲区。负缓冲意味着使用系统默认值,通常为tty设备进行行缓冲,并为其他文件进行完全缓冲。如果省略,则使用系统默认值。 [2]