Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 C#-内存映射文件是否可以帮助我处理大量数据而不会导致性能大幅下降_C# 4.0_Architecture_Memory Mapped Files - Fatal编程技术网

C# 4.0 C#-内存映射文件是否可以帮助我处理大量数据而不会导致性能大幅下降

C# 4.0 C#-内存映射文件是否可以帮助我处理大量数据而不会导致性能大幅下降,c#-4.0,architecture,memory-mapped-files,C# 4.0,Architecture,Memory Mapped Files,问题是关于内存映射文件——与直接将文件写入磁盘相比,如果我只需要不断向内存映射文件添加数据,这是否有助于我获得更好的写入性能 我的分析应用程序生成大量数据,当所有输入行的处理完成时,这些数据将在最后聚合 当我按顺序处理输入行时,我没有问题,因为我可以在拾取下一个输入行之前进行聚合并释放输出数据 问题是,当我并行处理输入行时,我必须保留输出数据,直到我完成所有输入行。大约100K输入线的输出数据可能高达10GB。我使用serverGC,因此GC不会产生负面影响。 事实证明,将这一点牢记在心是一项挑

问题是关于内存映射文件——与直接将文件写入磁盘相比,如果我只需要不断向内存映射文件添加数据,这是否有助于我获得更好的写入性能

我的分析应用程序生成大量数据,当所有输入行的处理完成时,这些数据将在最后聚合

当我按顺序处理输入行时,我没有问题,因为我可以在拾取下一个输入行之前进行聚合并释放输出数据

问题是,当我并行处理输入行时,我必须保留输出数据,直到我完成所有输入行。大约100K输入线的输出数据可能高达10GB。我使用serverGC,因此GC不会产生负面影响。 事实证明,将这一点牢记在心是一项挑战。因为输入线可以升高到500K

因此,下一个选项是从每个线程将其临时写入磁盘,最后读取所有这些内容并进行聚合。但正如猜测的那样,由于磁盘写入,它的速度非常慢

在这种情况下,使用内存映射文件会有所帮助。
或者您是否建议使用其他选项,例如,可能是一个对磁盘进行延迟写入的数据库,这样应用程序的性能就不会受到影响。

我认为数据是稀疏的。在进行聚合之前,为什么不尝试将其压缩并存储在RAM中?

文件系统缓存已经映射了内存。如果写入是瓶颈,那么MMF会使情况变得更糟,因为它们会从缓存中拿走内存。你需要购买更多的RAM。是的,这绝对是购买更多RAM的一个选择,而且还可以根据可用内存整合一些逻辑,在内存中运行整个程序,或者在需要时使用磁盘。谢谢你的回复。我想数据是稀疏的。在进行聚合之前,为什么不尝试将其压缩并存储在RAM中?@FractalizeR听起来不错,我会尝试这个选项。非常感谢。@Mouli欢迎您。把我的评论作为回答。