함수를 재귀 적으로 호출해야합니다. 그러나 잠시 후 StackOverFlowException을 던집니다. Invoke (새 Action (Start)) 메서드를 사용하면 긴 예외가 아니라 동일한 예외가 발생하지만 이전 메서드보다 짧습니다.재귀 함수 호출 Throw StackOverFlowException
이 문제를 어떻게 극복 할 수 있습니까?
예제 코드 :
private void Start()
{
// run select query
mysql(selectQueryString.ToString());
msdr = mysql();
// is finished
if (!msdr.HasRows)
{
this.Finish();
return;
}
// get mysql fields
string[] mysqlFields = Common.GetFields(ref msdr);
while (msdr.Read())
{
// set lastSelectID
lastSelectID = Convert.ToInt32(msdr[idFieldName].ToString());
// fill mssql stored procedure parameters
for (int i = 0; i < matchTable.Count; i++)
{
string valueToAdd = Common.ConvertToEqualivantString(matchTable[i].Type, matchTable[i].Value, ref msdr, ref id, matchTable[i].Parameters);
sql.Ekle(matchTable[i].Key, valueToAdd);
}
// execute adding operation
lastInsertID = (int)sql(false);
// update status bar
this.UpdateStatusBar();
// update menues
this.UpdateMenues();
// increment id for "{id}" statement
id++;
}
// close data reader
msdr.Close();
msdr.Dispose();
mysql.DisposeCommand();
// increment select limit
selectQueryString.LimitFirst += selectQueryString.LimitLast;
// call itself until finish
this.Start();
}
얼마나 많은 재귀를 기대합니까? 물론 당신은 결국 스택을 날려 버릴 것입니다. 재귀를 멈추게하는 조건은 없습니다. 내가 볼 수있는 한 영원히 계속됩니다. –
@SimonWhitehead 종료 조건은 메소드의 맨 위에 있습니다. 조기 반환. 그러나 조건은 나에게 좋은 것처럼 보이지 않는다. 편집 : 나는 그것에 대해 잘못했다. mysql()은 매번 다른 것을 반환한다. – hvd
// 선택 증가 제한 selectQueryString.LimitFirst + = selectQueryString.LimitLast; – Mesut