У меня немного странное поведение с методом, который я создал, когда пытаюсь протестировать его производительность, в основном, если я закомментирую/отключу один из возвратов в одном из операторов if, он будет меняться с 400 мс до 4 мс, почти как если бы он компилировался, а не фактически запускал код, это имело бы смысл, если бы после комментирования/отключения одного возврата он возвращал только true или false, поэтому у него была только одна опция, тогда я могу видеть, как компилятор оптимизирует его и всегда устанавливает это как логическое значение, а не запуск кода.
Кто-нибудь знает, что может происходить, или у вас есть рекомендации по лучшему способу запуска теста?
Мой тестовый код:
Vec3 spherePos = new Vec3(43.7527, 75.9756, 0);
double sphereRadisSq = 50 * 50;
Vec3 rayPos = new Vec3(-5.32301, 5.97157, -112.983);
Vec3 rayDir = new Vec3(0.457841, 0.680324, 0.572312);
sw.Reset();
sw.Start();
bool res = false;
for (int i = 0; i < 10000000; i++)
{
res = Intersect.RaySphereFast(rayPos, rayDir, spherePos, sphereRadisSq);
}
sw.Stop();
Debug.Log($"testTime: {sw.ElapsedMilliseconds} ms");
Debug.Log(res);
И статический метод:
public static bool RaySphereFast(Vec3 _rp, Vec3 _rd, Vec3 _sp, double _srsq)
{
double rs = Vec3.DistanceFast(_rp, _sp);
if (rs < _srsq)
{
return (true); //
Подробнее здесь: https://stackoverflow.com/questions/522 ... rns-vs-two
Метод C# в 100 раз медленнее с тремя возвратами против двух? ⇐ C#
Место общения программистов C#
-
Anonymous
1763582906
Anonymous
У меня немного странное поведение с методом, который я создал, когда пытаюсь протестировать его производительность, в основном, если я закомментирую/отключу один из возвратов в одном из операторов if, он будет меняться с 400 мс до 4 мс, почти как если бы он компилировался, а не фактически запускал код, это имело бы смысл, если бы после комментирования/отключения одного возврата он возвращал только true или false, поэтому у него была только одна опция, тогда я могу видеть, как компилятор оптимизирует его и всегда устанавливает это как логическое значение, а не запуск кода.
Кто-нибудь знает, что может происходить, или у вас есть рекомендации по лучшему способу запуска теста?
[b]Мой тестовый код:[/b]
Vec3 spherePos = new Vec3(43.7527, 75.9756, 0);
double sphereRadisSq = 50 * 50;
Vec3 rayPos = new Vec3(-5.32301, 5.97157, -112.983);
Vec3 rayDir = new Vec3(0.457841, 0.680324, 0.572312);
sw.Reset();
sw.Start();
bool res = false;
for (int i = 0; i < 10000000; i++)
{
res = Intersect.RaySphereFast(rayPos, rayDir, spherePos, sphereRadisSq);
}
sw.Stop();
Debug.Log($"testTime: {sw.ElapsedMilliseconds} ms");
Debug.Log(res);
[b]И статический метод:[/b]
public static bool RaySphereFast(Vec3 _rp, Vec3 _rd, Vec3 _sp, double _srsq)
{
double rs = Vec3.DistanceFast(_rp, _sp);
if (rs < _srsq)
{
return (true); //
Подробнее здесь: [url]https://stackoverflow.com/questions/52242001/c-sharp-method-100x-slower-with-three-returns-vs-two[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия