2017-01-17 8 views
-1

ASP.NETのWebサイトでは、私にstatic readonly XGeoPhone provider = new XGeoPhone();があります。 クラス内にはstatic readonly XPhoneInfo[] phoneInfo = new[] { new XPhoneInfo(......), ... 250000 more objects ... }があります。これをデベロッパーマシンや実サーバで実行すると、new XGeoPhone()でクラッシュし、StackOverflowExceptionになります。私はそれがヒープではなく、スタック上にこの巨大な配列を作成しようとしていることをかなり理解していないのですか?何が起こっている?static readonlyフィールドによってStackOverflowExceptionが発生する

UPDATE:クラッシュする最も簡単なバージョン:

public partial class XGeoPhone 
{ 
    public XPhoneInfo GetInfo(long phone) 
    { 
     return 
      phoneInfos. 
      FirstOrDefault(pi => 
       pi.Start <= phone && 
       phone <= pi.End); 
    } 

    static readonly XPhoneInfo[] phoneInfos = new[] 
    { 
     new XPhoneInfo(2000000000, 2099999999, XCountryId.EG, null, null), 
     new XPhoneInfo(2120000000, 2129999999, XCountryId.MA, null, null), 
     new XPhoneInfo(2130000000, 2139999999, XCountryId.DZ, null, null), 
     new XPhoneInfo(2160000000, 2169999999, XCountryId.TN, null, null), 
     new XPhoneInfo(2180000000, 2189999999, XCountryId.LY, null, null), 
     ......... 
    } 
} 

public class XPhoneInfo 
{ 
    public XPhoneInfo(long start, long end, XCountryId? country, string region, string provider) 
    { 
     this.Start = start; 
     this.End = end; 
     this.Country = country; 
     this.Region = region; 
     this.Provider = provider; 
    } 

    public long Start { get; private set; } 
    public long End { get; private set; } 
    public XCountryId? Country { get; private set; } 
    public string Region { get; private set; } 
    public string Provider { get; private set; } 
} 

class Program 
{ 
    static readonly XGeoPhone g = new XGeoPhone(); 

    static void Main(string[] args) 
    { 
     var v = g.GetInfo(79054567890); 
    } 
} 
+2

あなたは再帰的な構造を持っている可能性があります –

+1

'250000'オブジェクトはコードによって手動で追加されましたか? ** CODE SMELL ** –

+3

'.... 250000 more objects ....'それはかっこいい臭いです! –

答えて

-1

さて、私は回避策を見つけた - 私はスレッドを作成し、hereは説明のように、スレッドのコンストラクタでスタックサイズを指定することができます。できます。しかし、私はその大きな配列をcsvファイルに移動することに決めました。

関連する問題