Все они работают:
#include <iostream>
using namespace std;
//Good, because manual memory management isn't needed and this uses
//less heap memory (or no heap memory) so this is safer if
//used in a low memory situation
void f() { throw string("foo"); }
//Valid, but avoid manual memory management if there's no reason to use it
void g() { throw new string("foo"); }
//Best. Just a pointer to a string literal, so no allocation is needed,
//saving on cleanup, and removing a chance for an allocation to fail.
void h() { throw "foo"; }
int main() {
try { f(); } catch (string s) { cout << s << endl; }
try { g(); } catch (string* s) { cout << *s << endl; delete s; }
try { h(); } catch (const char* s) { cout << s << endl; }
return 0;
}
необходимо предпочесть h f к g. Обратите внимание, что в наименее предпочтительной опции необходимо освободить память явно.
Если вы извлекаете подмножество всех данных базы данных, например, отображаете на экране 20 строк из 1000, лучше выполнить сортировку по базе данных. Это будет быстрее и проще и позволит вам извлекать по одной странице строк (20, 50, 100) за раз вместо всех.
Если ваш набор данных довольно мал, сортировка в вашем коде может быть более удобной если вы хотите реализовать сложную сортировку. Обычно эту сложную сортировку можно выполнить в SQL
, но не так просто, как в коде.
Короче говоря, практическое правило - сортировка через SQL
, с некоторым преимуществом случаи к правилу.
В общем, вам лучше использовать ORDER BY
в вашем запросе SQL - таким образом, если есть применимый индекс, вы можете получить свою сортировку " бесплатно »(в худшем случае, это будет такой же объем работы, как и в вашем коде, но часто это может быть меньше работы, чем это!).
Я почти уверен, что это будет быстрее, если база данных сможет его сортировать. Есть инженеры, которые тратят много времени на совершенствование и оптимизацию своих алгоритмов поиска, тогда как вам придется реализовать свой собственный алгоритм сортировки, который может добавить еще несколько вычислений.
Я бы позволил базе данных выполнять сортировку, в целом они очень хороши в этом.
Это не совсем так, но я недавно опубликовал кое-что, что касается сортировки на стороне базы данных и на стороне приложения. Статья посвящена технике .net, поэтому большая часть ее, вероятно, не будет вам интересна, но основные принципы остаются:
Отнесение сортировки на сторону клиента (например, jQuery, сортировка наборов данных / Dataview) может показаться заманчивым. И это действительно эффективный вариант для разбиения по страницам, сортировки и фильтрации, если (и только если):
1. набор данных невелик, и
1. мало заботятся о производительности и масштабируемости
По моему опыту, систем, отвечающих таким критериям, немного, и они очень редки. Обратите внимание, что невозможно смешивать и сопоставлять сортировку / разбиение по страницам в приложении / базе данных - если вы запрашиваете базу данных для несортированных 100 строк данных, затем отсортируйте эти строки на стороне приложения, вы, скорее всего, не получите ожидаемого набора данных. Это может показаться очевидным, но я видел ошибку достаточно много раз, и мне хотелось хотя бы упомянуть о ней.
Гораздо эффективнее сортировать и фильтровать в базе данных по ряду причин. Во-первых, механизмы баз данных оптимизированы для выполнения именно той работы, которую влекут за собой сортировка и фильтрация; это то, для чего был разработан их основной код. Но даже если это запретить - даже если предположить, что вы можете написать код, который мог бы соответствовать типу сортировки, фильтрации и производительности подкачки зрелого механизма базы данных - все же предпочтительнее выполнять эту работу в базе данных по той простой причине, что более эффективно ограничить объем данных, которые передаются из базы данных на сервер приложений.
Так, например, если у вас есть 10 000 строк до фильтрации, и ваш запрос сокращает это число до 75, фильтрация на клиенте приводит к данным из всех 10000 строк, передаваемых по сети (и в память вашего сервера приложений), где фильтрация на стороне базы данных приведет только к отфильтрованным 75 строкам перемещается между базой данных и приложением. он может оказать огромное влияние на производительность и масштабируемость.
Полный текст сообщения находится здесь: http://psandler.wordpress.com/2009/11/20/dynamic-search-objects-part-5sorting/
Let the database sort it. Then you can have paging with JPA easily without readin in the whole resultset.