что такое использование встроенного ключевого слова в Delphi

Мое решение:

values ​​/ dimens.xml:

<resources>
    <dimen name="grip_view_entry_size">160dp</dimen>
    <dimen name="grip_view_spacing">10dp</dimen>
</resources>

layout / gridview.xml

<GridView android:id="@+id/android:list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:numColumns="auto_fit"
    android:verticalSpacing="@dimen/grip_view_spacing"
    android:horizontalSpacing="@dimen/grip_view_spacing"
    android:stretchMode="columnWidth"
    android:gravity="center"
    android:scrollingCache="false"
    android:fastScrollEnabled="true"
    android:animationCache="false"/>

в вашем фрагменте:

private void refreshGridView() {

    int gridViewEntrySize = getResources().getDimensionPixelSize(R.dimen.grip_view_entry_size);
    int gridViewSpacing = getResources().getDimensionPixelSize(R.dimen.grip_view_spacing);

    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();

    int numColumns = (display.getWidth() - gridViewSpacing) / (gridViewEntrySize + gridViewSpacing);

    gridView.setNumColumns(numColumns);
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    refreshGridView();
}

@Override
public void onResume() {
    super.onResume();
    refreshGridView();
}
13
задан 22 July 2009 в 12:24
поделиться

4 ответа

Это подсказка компилятору, что функция / процедура должна быть (если возможно) встроенной, т.е. когда вы ее вызываете, она должна разворачиваться как макрос, а не вызываться.

Это оптимизация для (очень) небольших функций, где накладные расходы на вызов могут быть значительными. Вы найдете множество примеров, например, в windows.pas

. То, что происходит на самом деле, зависит от сложности функции, публичного / частного доступа и вашей версии Delphi.

23
ответ дан 1 December 2019 в 06:28
поделиться

Другие ответили, что делает inline, но я просто хотел указать, что есть опция Compiler для включения, выключения или автоматического включения inline. Ознакомьтесь с «Процедурами и функциями вызова» в документации D2009 для очень хорошего объяснения механики inline. Вот ссылка на онлайн-документы:

Delphi Online Docs for inline

11
ответ дан 1 December 2019 в 06:28
поделиться

Он заимствован из C в том смысле, что он сообщает компилятору, что это короткая процедура, которая часто вызывается, и рекомендует компилятору рассматривать функцию как макрос и интегрировать код функции непосредственно в программа в вызываемой точке вместо использования вызова функции.

Это дает более быстрый код, потому что нет накладных расходов на вызов функции, но за счет более крупной программы. Также обратите внимание, что, как и в C, это рекомендация компилятору, на самом деле это не обязательно, и оптимизатор может вас отвергнуть.

Где это сделать? Ну, как и разматывание петли, это метод, который сейчас очень редко используется. Классическое место для использования - это глубоко вложенная структура, которая критична в реальном времени, например, рендеринг кода в графическом приложении, где несколько машинных вызовов, сокращаемых на каждой итерации, могут увеличить частоту обновления экрана.

2
ответ дан 1 December 2019 в 06:28
поделиться

Он сообщает компилятору сгенерировать код для встроенной подпрограммы ; в том месте, где она вызывается, вместо перехода к подпрограмме и обратно.

Для процедур, которые переводятся в очень короткий ассемблер, это может быть преимуществом для производительности, поскольку фактический код относительно короткий по сравнению с подготовкой параметров, фактическим вызовом и прологом / эпилогом процедуры.

Если процедура слишком длинная, это может тормозить производительность, и гигантски взорвать ваш код.

11
ответ дан 1 December 2019 в 06:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: