Paul Siberdt писал(а):Выходит, внутренний добилдовый тест в движке мало имеет общего с производительностью в релизе и bottleneck искать надо в более широких вещах?
По крайней мере debug-билд, release-билд и release-билд, запущенный не из-под Студии, показывают разные результаты. Чтобы узнать, как будет выглядеть код в дикой природе, надо запускать его не из-под Студии и потом подключаться к нему студийным отладчиком.
Как повторить эксперимент, используя Mono, а не .Net, я не знаю. Возможно, что под Mono результат будет другой.
Недавно вынес часть кода, генерировавшего ландшафты, в отдельную библиотеку, прошёлся по ней нормальным профайлером, и он мне наглядно показал, какие места в программе можно и нужно ускорить. Замена алгоритма в одном из методов уменьшила время его выполнения с 30 секунд до 0,5. Ещё пару методов ускорил в несколько раз, просто уменьшив до достаточного разрешение используемых там карт и масок.
Вот еще что обнаружил:
Обычное обращение к компоненту вектора myVector.x почти вдвое быстрее, обращения по myVector[0]
x ― это простое поле класса, а [..] ― это целый метод с таким кодом:
Используется csharp
public float get_Item(int index)
{
switch (index)
{
case 0:
return this.x;
case 1:
return this.y;
case 2:
return this.z;
}
throw new IndexOutOfRangeException("Invalid Vector3 index!");
}
PSПовторил тест с циклом на списке List<int> вместо массива int[]. Ускорение получилось, но всего примерно на 20 миллисекунд за 100 миллионов итераций.