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

Dan*_*ain 8 c# memory-management

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

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

代码在处理时传递给几个类.

有一天,我在我的小组的一个较大的项目上运行它,我的程序因为有太多的源代码加载到内存中而对我不利.这是一个极端的案例,但我希望将来能够处理这个问题.

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

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

我想在解决这个问题的同时保持合理的性能水平.大多数情况下,源代码会毫无问题地适应内存,所以当我内存不足时,有没有办法只能"寻呼"我的信息?有没有办法告诉我的应用程序何时内存不足?

更新:问题不在于单个文件填充内存,其内存中的所有文件都会立即填充内存.我目前的想法是在处理磁盘驱动器时将其旋转

mfe*_*old 3

1.6GB 仍然可以管理,并且本身不会导致内存问题。低效的字符串操作可能会做到这一点。

当您解析源代码时,您可能会将其分成某些子字符串 - 标记或无论您如何称呼它们。如果您的令牌组合起来占整个源代码,那么内存消耗就会增加一倍。根据您执行的处理的复杂性,乘数可能会更大。我在这里的第一步是仔细研究如何使用字符串并找到一种优化它的方法 - 即在第一次传递后丢弃原始字符串,压缩空格,或使用原始字符串的索引(指针)而不是实际的子字符串 - 有许多技术在这里有用。

如果这些都没有帮助,那么我会诉诸于在磁盘之间交换它们