Я видел, что слишком много людей тратят долгий таймер, ускоряя циклы, которые, по словам профилировщика, медленны, когда в реальной жизни кэш процессора делает их быстрыми.
Некоторые профилировщики действительнохорош в такой ерунде.
Какова ваша общая цель?Вы хотите, чтобы вычисления выполнялись за меньшее время настенных часов?
Если нет, проигнорируйте этот ответ.
Если это так, вам нужно знать, что заставляет тратить время настенных часов на то, чтоВы можете избавиться от.
Речь идет не о точности времени.Речь идет о точности местоположения.Я полагаю, что вам действительно нужно знать, какие строки кода являются: 1) ответственными за разумную часть затраченного времени и 2) которые могут быть выполнены лучше или не выполнены вообще.Это то, что вам нужно знать, потому что, если нет таких строк кода, что вы собираетесь оптимизировать?
Отличный способ найти такие строки кода - это любой профилировщик, который 1) берет образцы, на настенные часы время (не процессорное время) стека вызовов и 2) говорит вам, для каждой строки кода (не функции), которая появляется настеки вызовов, на каких процентах стеков он отображается.Ваши строки кандидата на оптимизацию относятся к числу строк с большим процентом.(Пара примеров, отличных от .net: Zoom и LTProf .)
Честно говоря, профилировщик, который я использую, - это тот, который у вас уже есть.Я просто приостанавливаю программу, пока она работает медленно, и смотрю на стек.Мне не нужно много образцов.На самом деле, если есть строка кода, без которой я мог бы обойтись, если она появляется всего в двух выборках, я знаю, что это стоит исправить, и чем меньше выборок потребовалось, чтобы добраться до этой точки, тем большеэто. Вот более подробное объяснение.
Почти всегда существует множество "узких мест".Поэтому я нахожу большую, исправляю и делаю все снова.Исправление узкого места делает с остальными узкими местами - , оно делает их больше .Этот «эффект увеличения» позволяет вам продолжать движение до тех пор, пока не останется больше скорости, чтобы выжать.