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

List を IEnumerable に置き換えることができる場合は、次のアプローチを使用できます

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

したがって、基本的にはメモリを割り当てません。さらに処理を行うと、Gen().ToArray() のようなものを呼び出せないことに注意する必要があります。これにより、同じ問題が発生します。リストが必要な場合、これが機能する方法はありません。

于 2013-04-09T06:46:52.763 に答える
1

解析を 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

数字が必要な場合は、代わりに次のコードを試してください。

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

十分なメモリがありません。
ループ予約メモリの各ステップ。ループ全体に [99999999 * 99999999/2 * sizeof(double)] が必要 B. これは本当に大きな数です

于 2013-04-09T06:34:26.673 に答える
0

ジョン・ウィレムスの答えをお勧めします-intはいつでも文字列よりも高速です..

必要に応じて文字列に変換するだけです。シナリオに最適な (変換の) 方法については、このリンクを確認してください。

オブジェクトを int にキャストするより良い方法

于 2013-11-07T07:49:12.627 に答える