1

我想填写如下列表:

    List<string> list_lines = new List<string>();
    for (double num = double.Parse(txtStart.Text); num < 99999999; num++)
    {
        list_lines.Add(num.ToString());
    }

但是这些代码会导致错误33,554,432和那个错误:
Out Of Memory Exception
我想使用那个列表,有什么替换它或者我该如何修复那个错误?

提前致谢

4

5 回答 5

3

如果您可以用 IEnumerable 替换 List ,则可以使用以下方法

    static IEnumerable<string> Gen()
    {
        for (double num = 0; num < 99999999; num++)
        {
            yield return num.ToString();
        }
    }

所以基本上你不分配内存,通过进一步的处理你必须记住你不能调用像 Gen().ToArray() 这样的东西,这会产生同样的问题。如果你需要列表,这是不可能的。

于 2013-04-09T06:46:52.763 回答
1

你可以做一些内存优化,例如只做一次解析:

var parsed_number = double.Parse(txtStart.Text);

List<string> list_lines = new List<string>();
for (double num = parsed_number; num < 99999999; ++num)
{
    list_lines.Add(num.ToString());
}

这可能有助于内存使用。

于 2013-04-09T06:36:39.637 回答
0

你内存不够!
循环的每一步都保留内存。整个循环需要 [99999999 * 99999999/2 * sizeof(double)] B. 这个数字真的很大

于 2013-04-09T06:34:26.673 回答
0

如果您需要数字,请尝试使用以下代码:

int startNumber = int.Parse(txtStart.Text);
List<int> list_lines = new List<int>();

for (int i = startNumber; i < 99999999; i++)
{
    list_lines.Add(i);
}

这将毫无问题地运行。如果您以后需要将数字作为字符串,只需在检索它们时将它们转换即可。

于 2013-04-09T06:46:35.610 回答
0

我建议 John Willemse 的回答 - 任何时候整数都比字符串快..

只需在需要时转换为字符串 - 查看此链接以获得适合您的场景的最佳可能方法(转换):

将对象转换为 int 的更好方法

于 2013-11-07T07:49:12.627 回答