aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/string_utils/csv/csv.cpp
diff options
context:
space:
mode:
authorpnv1 <pnv1@yandex-team.com>2025-06-25 10:46:15 +0300
committerpnv1 <pnv1@yandex-team.com>2025-06-25 11:35:36 +0300
commit7dff50ae6cd121950e4225dfe6395e44947263ae (patch)
treea260d80de0d772b11067132a9e6f08a9748e9a0f /library/cpp/string_utils/csv/csv.cpp
parent766e56cf1df73b7db3280fcb18a96030086bcf16 (diff)
downloadydb-7dff50ae6cd121950e4225dfe6395e44947263ae.tar.gz
Improve csv parsing speed in С++ csv library
Improve csv parsing speed in csv library На примере ВМ в QYP на ssd скорость чтении csv этой либой: - до этих изменений стабильно показывает 383-387 MB/s - после этих изменений стабильно показывает 613-615 MB/s **++Просьба PR пока не мерджить++**. Пока что надеюсь просто получить шип от овнеров. Мы собираем метрики по текущей производительности в процессе импорта в YDB CLI. Чуть позже, если всё ОК, вмерджу этот PR, чтобы мы замерили разницу. commit_hash:a23fc7e631733ffe3cae2941da8b3bdb75bccc94
Diffstat (limited to 'library/cpp/string_utils/csv/csv.cpp')
-rw-r--r--library/cpp/string_utils/csv/csv.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/library/cpp/string_utils/csv/csv.cpp b/library/cpp/string_utils/csv/csv.cpp
index fd3d932fcd5..6dd76de85fe 100644
--- a/library/cpp/string_utils/csv/csv.cpp
+++ b/library/cpp/string_utils/csv/csv.cpp
@@ -1,3 +1,5 @@
+#include <algorithm>
+
#include "csv.h"
TStringBuf NCsvFormat::CsvSplitter::Consume() {
@@ -70,10 +72,10 @@ TString NCsvFormat::TLinesSplitter::ConsumeLine() {
TString result;
TString line;
while (Input.ReadLine(line)) {
- for (auto it = line.begin(); it != line.end(); ++it) {
- if (*it == Quote) {
- Escape = !Escape;
- }
+ const size_t quoteCount = std::count(line.cbegin(), line.cend(), Quote);
+ // A theoretically faster version of "if (quoteCount %2 == 1)"
+ if (quoteCount & 1) {
+ Escape = !Escape;
}
if (!result) {
result = line;