protected int ChooseFastestMethod()
{
long minTime = long.MaxValue;
int index = 0;
var possibleRealizationData = GetPossibleRealizationTestData();
if (possibleRealizationData.IdPerRealization.Count == 0)
throw new ArgumentOutOfRangeException("possibleRealizationList",
"There is no any possible realizations of method for " + GetType().Name);
var argumentArray = possibleRealizationData.ArgumentArray;
foreach (KeyValuePair<int, object> keyValuePair in possibleRealizationData.IdPerRealization)
{
var possibleRealization = keyValuePair.Value;
var methodInfo = GetMethodInfo(possibleRealization, possibleRealizationData.MethodName);
long currentTime = GetExecutionTime(possibleRealization, methodInfo, argumentArray,
possibleRealizationData.CountOfTestInvokations);
if (currentTime < minTime)
{
minTime = currentTime;
index = keyValuePair.Key;
}
}
return index;
}