我正在编写偶尔需要将数据写入文件的代码,然后将该文件发送到另一个程序进行分析,并重复该过程。
文件格式非常严格;标题是必需的,但它们是不变的,只有大约10行。所以我有两个选择:
1。编写一个函数来删除文件末尾的行,直到我到达标题部分。
2. 删除旧文件并创建一个名称相同的新文件,每次都重写标题部分。
所以我的问题是:文件创建和删除是否存在显着的效率问题?编写它似乎比编写动态deleteLines()
函数更容易,但我对所涉及的开销感到好奇。如果重要,我正在使用C ++。
答案 0 :(得分:1)
在这种情况下的性能取决于许多事情,在底层文件系统等。所以,基准它。它写起来会很容易,并会给你最好的答案。
请记住Donand Knuth的陈述:
我们应该忘记效率低,大约97%的时间说: 过早优化是万恶之源。
答案 1 :(得分:1)
问题是,不同的方法需要采取什么行动?以下是一些答案:
截断文件意味着
删除文件意味着
创建文件意味着
将数据添加到空文件意味着
我认为,很明显删除/创建/附加文件需要的操作比简单地在标题后截断文件要多得多。
然而,正如其他人所说,如果你想要速度,请使用管道或共享内存区域(详情请参阅mmap()的文档)或类似内容。磁盘是有史以来最慢的内置电脑......
Ps:在设计/选择算法时忽略性能是所有慢速代码的邪恶根源......在这方面你最好听听Torvalds而不是Knuth。
答案 2 :(得分:0)
删除旧文件并写一个新文件可能更快,因为你只保留几个字节。如果修改现有文件,则必须先读取数据,然后再写入新数据。如果你只是继续写,那就是写操作。
但重点是,只是编写新文件可能更容易实现和理解,所以它应该是你的默认选择,除非你发现应用程序不够快并且分析显示这个特定的部分是瓶颈。