C# - 内存映射文件可以帮助我处理大量数据而不会显着降低性能
C# - would memory mapped files help me handle large amount of data without considerable performance degrade
问题是关于内存映射文件 - 与直接将文件写入磁盘相比,如果我只需要将数据附加到内存映射文件,它是否有助于我实现更好的写入性能。
我的分析应用程序生成大量数据,当所有输入行的处理完成后,这些数据将在最后聚合。
当我按顺序处理输入行时,没有任何问题,因为我可以进行聚合并在获取下一个输入行之前释放输出数据。
问题是当我并行处理输入行时,我必须保留输出数据直到完成所有输入行。大约 10 万条输入线的输出数据可能高达 10GB。我使用 serverGC,因此 GC 不会产生不利影响。
现在将其保存在内存中被证明是一个挑战。因为输入线可以高达 500K。
所以下一个选择是暂时将它从每个线程写入磁盘,最后读取所有内容并进行聚合。但正如猜测的那样,由于磁盘写入,它被证明非常非常慢。
在这种情况下使用内存映射文件会有帮助吗?
或者您是否建议任何其他选项,例如数据库可以延迟写入磁盘,这样应用程序就不会受到性能影响。
我想数据是稀疏的。为什么不在聚合之前尝试将其压缩并存储在 RAM 中?
问题是关于内存映射文件 - 与直接将文件写入磁盘相比,如果我只需要将数据附加到内存映射文件,它是否有助于我实现更好的写入性能。
我的分析应用程序生成大量数据,当所有输入行的处理完成后,这些数据将在最后聚合。
当我按顺序处理输入行时,没有任何问题,因为我可以进行聚合并在获取下一个输入行之前释放输出数据。
问题是当我并行处理输入行时,我必须保留输出数据直到完成所有输入行。大约 10 万条输入线的输出数据可能高达 10GB。我使用 serverGC,因此 GC 不会产生不利影响。 现在将其保存在内存中被证明是一个挑战。因为输入线可以高达 500K。
所以下一个选择是暂时将它从每个线程写入磁盘,最后读取所有内容并进行聚合。但正如猜测的那样,由于磁盘写入,它被证明非常非常慢。
在这种情况下使用内存映射文件会有帮助吗? 或者您是否建议任何其他选项,例如数据库可以延迟写入磁盘,这样应用程序就不会受到性能影响。
我想数据是稀疏的。为什么不在聚合之前尝试将其压缩并存储在 RAM 中?