forked from qt-creator/qt-creator
Sqlite: Tweaking reserve of values function
We now save the size of the maximum of all results. This can be improve performance if the result set sizes are similar. If the very different we will allocate to much memory. Because it is not changing any results it's hard to test. We maybe should add benchmarks later. Change-Id: I07227200076365b7fe4d0ac3951981469f9d454f Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -205,10 +205,12 @@ public:
|
|||||||
{
|
{
|
||||||
Resetter resetter{*this};
|
Resetter resetter{*this};
|
||||||
std::vector<ResultType> resultValues;
|
std::vector<ResultType> resultValues;
|
||||||
resultValues.reserve(reserveSize);
|
resultValues.reserve(std::max(reserveSize, m_maximumResultCount));
|
||||||
|
|
||||||
while (BaseStatement::next())
|
while (BaseStatement::next())
|
||||||
emplaceBackValues<ResultTypeCount>(resultValues);
|
emplaceBackValues<ResultTypeCount>(resultValues);
|
||||||
|
|
||||||
|
setMaximumResultCount(resultValues.size());
|
||||||
|
|
||||||
resetter.reset();
|
resetter.reset();
|
||||||
|
|
||||||
@@ -222,12 +224,14 @@ public:
|
|||||||
{
|
{
|
||||||
Resetter resetter{*this};
|
Resetter resetter{*this};
|
||||||
std::vector<ResultType> resultValues;
|
std::vector<ResultType> resultValues;
|
||||||
resultValues.reserve(reserveSize);
|
resultValues.reserve(std::max(reserveSize, m_maximumResultCount));
|
||||||
|
|
||||||
bindValues(queryValues...);
|
bindValues(queryValues...);
|
||||||
|
|
||||||
while (BaseStatement::next())
|
while (BaseStatement::next())
|
||||||
emplaceBackValues<ResultTypeCount>(resultValues);
|
emplaceBackValues<ResultTypeCount>(resultValues);
|
||||||
|
|
||||||
|
setMaximumResultCount(resultValues.size());
|
||||||
|
|
||||||
resetter.reset();
|
resetter.reset();
|
||||||
|
|
||||||
@@ -241,7 +245,7 @@ public:
|
|||||||
const std::vector<QueryElementType> &queryValues)
|
const std::vector<QueryElementType> &queryValues)
|
||||||
{
|
{
|
||||||
std::vector<ResultType> resultValues;
|
std::vector<ResultType> resultValues;
|
||||||
resultValues.reserve(reserveSize);
|
resultValues.reserve(std::max(reserveSize, m_maximumResultCount));
|
||||||
|
|
||||||
for (const QueryElementType &queryValue : queryValues) {
|
for (const QueryElementType &queryValue : queryValues) {
|
||||||
Resetter resetter{*this};
|
Resetter resetter{*this};
|
||||||
@@ -250,6 +254,8 @@ public:
|
|||||||
while (BaseStatement::next())
|
while (BaseStatement::next())
|
||||||
emplaceBackValues<ResultTypeCount>(resultValues);
|
emplaceBackValues<ResultTypeCount>(resultValues);
|
||||||
|
|
||||||
|
setMaximumResultCount(resultValues.size());
|
||||||
|
|
||||||
resetter.reset();
|
resetter.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -264,7 +270,7 @@ public:
|
|||||||
{
|
{
|
||||||
using Container = std::vector<ResultType>;
|
using Container = std::vector<ResultType>;
|
||||||
Container resultValues;
|
Container resultValues;
|
||||||
resultValues.reserve(reserveSize);
|
resultValues.reserve(std::max(reserveSize, m_maximumResultCount));
|
||||||
|
|
||||||
for (const auto &queryTuple : queryTuples) {
|
for (const auto &queryTuple : queryTuples) {
|
||||||
Resetter resetter{*this};
|
Resetter resetter{*this};
|
||||||
@@ -273,6 +279,8 @@ public:
|
|||||||
while (BaseStatement::next())
|
while (BaseStatement::next())
|
||||||
emplaceBackValues<ResultTypeCount>(resultValues);
|
emplaceBackValues<ResultTypeCount>(resultValues);
|
||||||
|
|
||||||
|
setMaximumResultCount(resultValues.size());
|
||||||
|
|
||||||
resetter.reset();
|
resetter.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -427,6 +435,13 @@ private:
|
|||||||
bindTupleValuesElement(element, ColumnIndices());
|
bindTupleValuesElement(element, ColumnIndices());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setMaximumResultCount(std::size_t count)
|
||||||
|
{
|
||||||
|
m_maximumResultCount = std::max(m_maximumResultCount, count);
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
std::size_t m_maximumResultCount = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Sqlite
|
} // namespace Sqlite
|
||||||
|
Reference in New Issue
Block a user