gpt4 book ai didi

c# - 处理大量文本时防止内存问题

转载 作者:太空狗 更新时间:2023-10-29 19:43:24 26 4
gpt4 key购买 nike

我编写了一个程序来分析项目的源代码并根据代码报告各种问题和指标。

为了分析源代码,我加载了项目目录结构中存在的代码文件,并从内存中分析代码。代码在传递给其他方法进行进一步分析之前会经过大量处理。

代码在处理时会传递给多个类。

前几天,我在我的团队拥有的一个更大的项目上运行它,我的程序在我身上崩溃了,因为加载到内存中的源代码太多了。目前这是一个极端案例,但我希望将来能够处理这个问题。

避免内存问题的最佳方法是什么?

我正在考虑加载代码,对文件进行初始处理,然后将结果序列化到磁盘,这样当我需要再次访问它们时,我就不必经历操作原始文件的过程再次编码。这有意义吗?还是序列化/反序列化比再次处理代码更昂贵?

我想在解决这个问题的同时保持合理的性能水平。大多数时候,源代码可以毫无问题地装入内存,那么有没有办法在我内存不足时只“分页”我的信息?有什么方法可以判断我的应用程序何时内存不足?

更新:问题不在于单个文件填满内存,而是内存中的所有文件一次填满内存。我目前的想法是在处理它们时关闭磁盘驱动器

最佳答案

1.6GB 仍然是可管理的,它本身不应该导致内存问题。低效的字符串操作可能会这样做。

当您解析源代码时,您可能会将其拆分为某些子字符串 - 标记或任何您称之为的东西。如果您的 token 加起来占了整个源代码,那么内存消耗就会翻倍。根据您执行的处理的复杂性,乘数可能会更大。我在这里的第一步是仔细看看你如何使用你的字符串并找到优化它的方法 - 即在第一次通过后丢弃 original,压缩空格,或使用索引(指针)到原始字符串而不是实际子字符串 - 有许多技术在这里很有用。

如果这些都没有帮助,我会求助于将它们来回交换磁盘

关于c# - 处理大量文本时防止内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1427410/

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