对于使用大量数据的“数字运算”风格的应用程序(读取:“数百 MB,但不是 GB”,即它可以很好地放入操作系统旁边的内存中),将所有数据读入内存是否有意义首先在开始处理之前避免在读取大型相关数据集时可能使程序 IO 绑定(bind),而不是从 RAM 加载它们?
这个答案在使用不同的数据支持之间会改变吗?即,无论您使用的是 XML 文件、平面文件、完整的 DBMS 等,答案是否相同?
最佳答案
你的程序和它的瓶颈一样快。如果这样做可以提高整体性能,那么将数据存储在内存中是有意义的。但是,没有硬性规定可以提高性能。当你解决了一个瓶颈时,新的东西就会成为瓶颈。因此,解决一个问题可能会使性能提高 1% 或 1000%,具体取决于下一个瓶颈是什么。你正在改进的东西可能仍然是瓶颈。
我认为这些事情通常适合三个级别之一:
从中吸取的教训是 Donald Knuth 引用的(有些过度使用且经常被错误引用的)“过早的优化是万恶之源”。急切和过分急切的解决方案会增加大量的复杂性,因此没有必要为不会产生有用好处的事情做这些事情。
程序员经常犯错误,在确定他们是否需要以及是否有用之前创建了一些高度(据称)优化的版本。
我自己对此的看法是:在遇到问题之前不要解决问题。
关于language-agnostic - 受 CPU 限制的应用程序与受 IO 限制的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1623245/