gpt4 book ai didi

c# - 从大文件中删除冗余数据

转载 作者:行者123 更新时间:2023-12-03 17:40:34 25 4
gpt4 key购买 nike

我有一个日志文件,每行都有单个字符串。我正在尝试从文件中删除重复的数据并将文件另存为新文件。我首先想到将数据读入 HashSet,然后保存散列集的内容,但是在尝试执行此操作时(在将字符串添加到散列集的行上),我收到“OutOfMemory”异常。

文件中约有 32,000,000 行。每次比较都重新读取整个文件是不切实际的。

有什么想法吗?我的另一个想法是将整个内容输出到 SQLite 数据库中并选择不同的值,但我不确定这是否适用于这么多值。

感谢您的任何意见!

最佳答案

您需要考虑的第一件事 - 高内存消耗是一个问题吗?

如果您的应用程序始终在具有大量可用 RAM 的服务器上运行,或者在任何其他情况下您知道您将有足够的内存,那么您可以做很多如果您的应用程序运行在低内存环境或未知环境。如果内存不是问题,那么请确保您的应用程序作为 64 位应用程序运行(当然,在 64 位操作系统上),否则您将被限制为 2GB 内存(如果您使用 LARGEADDRESSAWARE,则为 4GB)旗帜)。我想在这种情况下这是你的问题,你所要做的就是改变它 - 它会很好地工作(假设你有足够的内存)。

如果内存是个问题,并且您不需要使用太多内存,您可以按照您的建议将所有数据添加到数据库中(我更熟悉SQL Server等数据库,但我想SQLite也可以),确保列上有正确的索引,然后选择不同的值。

另一种选择是将文件作为流逐行读取,为每一行计算哈希值,并将该行保存到其他文件中,并将哈希值保留在内存中。如果散列已经存在,则移动到下一行(并且,如果您愿意,可以添加到已删除行数的计数器)。在这种情况下,您将在内存中保存更少的数据(仅对不重复的项目进行哈希处理)。

祝你好运。

关于c# - 从大文件中删除冗余数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13212094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com