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);
}
}
あなたは再帰的な構造を持っている可能性があります –
'250000'オブジェクトはコードによって手動で追加されましたか? ** CODE SMELL ** –
'.... 250000 more objects ....'それはかっこいい臭いです! –