我想到条件和编译器.我正在编写Arduino的应用程序,所以我需要尽可能快的应用程序.
在我的代码中我有这个:
#define DEBUG false
...
if (DEBUG)
{
String pinName;
pinName = "Pin ";
pinName += pin;
pinName += " initialized";
Serial.println(pinName);
}
Run Code Online (Sandbox Code Playgroud)
我想知道编译器是否在二进制文件中不包含代码(if块中的代码).条件总是错误的,所以程序永远不会去那里.
从另一方面来看.如果DEBUG是真的怎么办?Arduino是否测试条件或编译器只包含if在二进制文件中的主体?
我发现这个网站https://gcc.gnu.org/onlinedocs/gcc-3.0.2/cpp_4.html关于#if指令,所以我可以重写代码以获得这些指令而不是"正常"if.但我想知道我是否应该重写它,或者是否浪费时间.
我不确定发生了什么,但是我认为MySQL应该可以很好地处理。
我有这样的SQL。
SELECT u.id AS user_id, SUM(t.amount) AS total
FROM user u
INNER JOIN transaction t ON t.user_id = u.id
WHERE u.condition = true
GROUP BY u.id
ORDER BY total DESC;
Run Code Online (Sandbox Code Playgroud)
该查询运行10秒钟。
如果删除ORDER BY子句,则时间约为4秒。
表很大,但是在GROUP BY之后,我只有40行。排序40行真的需要6秒吗?我想说这应该由优化器处理。
但是,如果我这样运行查询:
SELECT *
FROM (
SELECT u.id AS user_id, SUM(t.amount) AS total
FROM user u
INNER JOIN transaction t ON t.user_id = u.id
WHERE u.condition = true
GROUP BY u.id
) data
ORDER BY total DESC;
Run Code Online (Sandbox Code Playgroud)
该查询运行4秒钟。我知道我强迫MySQL仅对从内部选择检索的40条记录进行排序。
我真的不明白一件事。MySQL无法在GROUP BY之前按总数排序。那么,什么使查询变慢呢?
在这种情况下,我可以使用第二个查询,但是如果我有另一个内部SQL,MySQL将开始创建临时表,这可能会使性能下降,甚至比ORDER BY还多。另一个“问题”是我使用ORM,而使用原始SQL确实很痛苦。
感谢您的建议。
编辑:
使用ORDER …
我有这个代码。
rele[0] = new ReleController(findViewById(R.id.button1), 1, this);
rele[1] = new ReleController(findViewById(R.id.button2), 2, this);
rele[2] = new ReleController(findViewById(R.id.button3), 3, this);
rele[3] = new ReleController(findViewById(R.id.button4), 4, this);
Run Code Online (Sandbox Code Playgroud)
我的按钮布局如下所示:
<LinearLayout style="@style/CoreLayout">
<ImageButton
android:id="@+id/button1"
style="@style/Button.Blue"
android:src="@mipmap/ic_arrow_left" />
<ImageButton
android:id="@+id/button2"
style="@style/Button.Green"
android:src="@mipmap/ic_arrow_right"/>
</LinearLayout>
<LinearLayout style="@style/CoreLayout">
<ImageButton
android:id="@+id/button3"
style="@style/Button.Yellow"
android:src="@mipmap/ic_arrow_up"/>
<ImageButton
android:id="@+id/button4"
style="@style/Button.Purple"
android:src="@mipmap/ic_arrow_down"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
我想弄清楚是否有办法做这样的事情:
for(int i = 0; i < 4; i++)
{
rele[i] = new ReleController(findViewById(R.id.button[i+1]), i+1, this);
}
Run Code Online (Sandbox Code Playgroud)
实际上,我有 8 个按钮,因此为所有按钮编写所有这些行真的很烦人。
我想知道按钮 ID 是否可以像这样声明为数组:
android:id="@+id/button[1]"
android:id="@+id/button[2]"
android:id="@+id/button[3]"
...
Run Code Online (Sandbox Code Playgroud)
感谢您的所有回答。
我为我们的 Nette web 项目开发了一个核心。核心作为库注入。虽然我希望能够在不注入的情况下测试和尝试核心项目的功能。所以我不得不单独添加启动核心项目所需的文件。这在尝试新功能时非常有用,但我不想在发布中包含这些文件(但仍然可以在 git 上共享,因此同事也可以尝试)。
是否有任何好的做法来处理这种情况?
我只找到了两个选项: