Необъяснимое переполнение стека
У меня есть код на 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#