【问题标题】:OOM exception when generating a large array of strings生成大量字符串时出现 OOM 异常
【发布时间】:2015-01-27 21:56:12
【问题描述】:

我正在尝试生成大量字符串。在我的小示例代码中,它按预期工作,但我想要的结果的字符串长度为 8,而不是像下面这样的 3,这会导致内存不足异常。

有什么方法可以更有效地运行它吗?

string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
string numbers = "0123456789";
var query = from c1 in chars 
            from c2 in chars 
            from d1 in digits 
            select string.Format("{0}{1}{2}", c1, c2, d1);
string[] possibleCombinations = query.ToArray();

【问题讨论】:

  • 请根据您尝试生成的组合数量做一些基本的数学运算。这个数字可能非常大(数十亿或可能是数万亿)..因此不确定您正在寻找什么样的解决方案。即使OOM问题解决了,你可能需要很长时间才能枚举这么多值。为什么你首先需要生成这么多字符串?
  • 您真的打算在内存中创建一个包含 218,340,105,584,896 个条目 (62^8) 的彩虹表吗?

标签: c# asp.net performance


【解决方案1】:

不要调用ToArray() 方法!这会导致内存分配。如果您只是遍历查询,则枚举器会遍历所有可能的结果。您需要等待很长时间才能循环所有结果。

【讨论】:

    猜你喜欢
    • 2017-12-01
    • 2013-08-11
    • 2015-05-18
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多