Необъяснимое переполнение стека

У меня есть код на C#, который выбрасывает исключение переполнения стека. Он проходит цикл for 2485 раз, прежде чем произойдет, но securityDataArray.NumValues ​​равен 7234. Я не думаю, что у меня есть какие-либо рекурсии в этом коде, поэтому я застрял, я не понимаю, почему это происходит. Есть ли обходной путь?

Если вам нужен полный код, его можно найти здесь: http://blog.icanmakethiswork.io/2012/11/a-nicer-net-api-for-bloombergs-open-api.html

var securitiesFields = new Dictionary<string, Dictionary<string, object>>();

//Loop through each security
for (var i = 0; i < securityDataArray.NumValues; i++)
{
    //First take out the security object...
    var security = securityDataArray.GetValueAsElement(i);

    var securityName = security.GetElementAsString("security");
    //... then extract the fieldData object
    var fieldData = security.GetElement("fieldData"); //The stack overflow exception is thrown here

    //If we need to add a new security to the securitiesFields dictionary then do so
    Dictionary<string, object> results = null;
    if (!securitiesFields.ContainsKey(securityName))
        securitiesFields.Add(securityName, new Dictionary<string, object>());

    //Get the fieldsByDate dictionary from the securitiesFields dictionary
    results = securitiesFields[securityName];

    //Extract results and store in results dictionary
    foreach (var dataElement in fieldData.Elements)
    {
        var dataElementName = dataElement.Name.ToString();
        results.Add(dataElementName, dataElement.GetValue());
    }
}
return securitiesFields;

(Часть) стек вызовов:

BEmu_csh.dll!Bloomberglp.Blpapi.ReferenceDataRequest.ReferenceElementSecurityData.this[string].get(string name) Ligne 105 + 0xffffffd7 octets   C#
    BEmu_csh.dll!Bloomberglp.Blpapi.ReferenceDataRequest.ReferenceElementSecurityData.GetElement(string name) Ligne 99 + 0xe octets C#
    BEmu_csh.dll!Bloomberglp.Blpapi.Element.this[string].get(string name) Ligne 85 + 0xf octets C#
    BEmu_csh.dll!Bloomberglp.Blpapi.ReferenceDataRequest.ReferenceElementSecurityData.this[string].get(string name) Ligne 132 + 0xb octets  C#
    BEmu_csh.dll!Bloomberglp.Blpapi.ReferenceDataRequest.ReferenceElementSecurityData.GetElement(string name) Ligne 99 + 0xe octets C#
    BEmu_csh.dll!Bloomberglp.Blpapi.Element.this[string].get(string name) Ligne 85 + 0xf octets C#
    BEmu_csh.dll!Bloomberglp.Blpapi.ReferenceDataRequest.ReferenceElementSecurityData.this[string].get(string name) Ligne 132 + 0xb octets  C#
    BEmu_csh.dll!Bloomberglp.Blpapi.ReferenceDataRequest.ReferenceElementSecurityData.GetElement(string name) Ligne 99 + 0xe octets C#
    BEmu_csh.dll!Bloomberglp.Blpapi.Element.this[string].get(string name) Ligne 85 + 0xf octets C#
    BEmu_csh.dll!Bloomberglp.Blpapi.ReferenceDataRequest.ReferenceElementSecurityData.this[string].get(string name) Ligne 132 + 0xb octets  C#
    BEmu_csh.dll!Bloomberglp.Blpapi.ReferenceDataRequest.ReferenceElementSecurityData.GetElement(string name) Ligne 99 + 0xe octets C#
    BEmu_csh.dll!Bloomberglp.Blpapi.Element.this[string].get(string name) Ligne 85 + 0xf octets C#
    BEmu_csh.dll!Bloomberglp.Blpapi.ReferenceDataRequest.ReferenceElementSecurityData.this[string].get(string name) Ligne 132 + 0xb octets  C#
    BEmu_csh.dll!Bloomberglp.Blpapi.ReferenceDataRequest.ReferenceElementSecurityData.GetElement(string name) Ligne 99 + 0xe octets C#
    BEmu_csh.dll!Bloomberglp.Blpapi.Element.this[string].get(string name) Ligne 85 + 0xf octets C#

0 ответов

Другие вопросы по тегам