CINXE.COM

GitHub - nietras/Sep: World's Fastest .NET CSV Parser. Modern, minimal, fast, zero allocation, reading and writing of separated values (`csv`, `tsv` etc.). Cross-platform, trimmable and AOT/NativeAOT compatible.

<!DOCTYPE html> <html lang="en" data-color-mode="auto" data-light-theme="light" data-dark-theme="dark" data-a11y-animated-images="system" data-a11y-link-underlines="true" > <head> <meta charset="utf-8"> <link rel="dns-prefetch" href="https://github.githubassets.com"> <link rel="dns-prefetch" href="https://avatars.githubusercontent.com"> <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com"> <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/"> <link rel="preconnect" href="https://github.githubassets.com" crossorigin> <link rel="preconnect" href="https://avatars.githubusercontent.com"> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-74231a1f3bbb.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-8a995f0bacd4.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-f37fb7684b1f.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-9ac301c3ebe5.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-cd826e8636dc.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-f91b0f603451.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-83beb16e0ecf.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-6e122dab64fc.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-18119e682df0.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-225433424a87.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-cba26849680f.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-03f97e65e478.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-ea73c9cb5377.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repository-4fce88777fa8.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-0210be90f4d3.css" /> <script type="application/json" id="client-env">{"locale":"en","featureFlags":["copilot_immersive_issue_preview","copilot_new_references_ui","copilot_chat_repo_custom_instructions_preview","copilot_no_floating_button","copilot_topics_as_references","copilot_read_shared_conversation","copilot_duplicate_thread","dotcom_chat_client_side_skills","experimentation_azure_variant_endpoint","failbot_handle_non_errors","geojson_azure_maps","ghost_pilot_confidence_truncation_25","ghost_pilot_confidence_truncation_40","github_models_gateway_parse_params","github_models_o3_mini_streaming","insert_before_patch","issues_react_remove_placeholders","issues_react_blur_item_picker_on_close","issues_advanced_search_nested_ownership_filters","issues_dashboard_no_redirects","marketing_pages_search_explore_provider","primer_react_css_modules_ga","react_data_router_pull_requests","react_override_default_key","remove_child_patch","sample_network_conn_type","swp_enterprise_contact_form","site_proxima_australia_update","viewscreen_sandbox","issues_react_create_milestone","issues_react_cache_fix_workaround","lifecycle_label_name_updates","copilot_task_oriented_assistive_prompts","issue_types_prevent_private_type_creation","refresh_image_video_src","react_router_dispose_on_disconnect","codespaces_prebuild_region_target_update","turbo_app_id_restore","copilot_code_review_sign_up_closed"]}</script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-6fe19aafe951.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover_js-9da652f58479.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_arianotify-polyfill_ariaNotify-polyfill_js-node_modules_github_mi-3abb8f-46b9f4874d95.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_failbot_failbot_ts-952d624642a1.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/environment-f04cb2a9fc8c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_behaviors_dist_esm_index_mjs-0dbb79f97f8f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_selector-observer_dist_index_esm_js-f690fd9ae3d5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_relative-time-element_dist_index_js-62d275b7ddd9.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_text-expander-element_dist_index_js-78748950cb0c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_auto-complete-element_dist_index_js-node_modules_github_catalyst_-8e9f78-a90ac05d2469.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-b5f1d7-a1760ffda83d.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_markdown-toolbar-element_dist_index_js-ceef33f593fa.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_primer_view-co-c44a69-efa32db3a345.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-394f8eb34f19.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-fdc7225e42cc.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_braintree_browser-detection_dist_browser-detection_js-node_modules_githu-2906d7-2a07a295af40.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_lit-html_lit-html_js-be8cb88f481b.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_morphdom_dist_morphdom-e-7c534c-a4a1922eb55f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_turbo_dist_turbo_es2017-esm_js-a03ee12d659a.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-893f9f-b6294cf703b7.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_color-convert_index_js-e3180fe3bcb3.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_quote-selection_dist_index_js-node_modules_github_session-resume_-947061-e7a6c4a19f98.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_updatable-content_updatable-content_ts-62f3e9c52ece.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_task-list_ts-app_assets_modules_github_sso_ts-ui_packages-900dde-768abe60b1f8.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_sticky-scroll-into-view_ts-3e000c5d31a9.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_ajax-error_ts-app_assets_modules_github_behaviors_include-87a4ae-eda74b9de9cd.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_commenting_edit_ts-app_assets_modules_github_behaviors_ht-83c235-e429cff6ceb1.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-c92ce7c6a557.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-f6223d90c7ba.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-01e85cd1be94.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_virtualized-list_es_index_js-node_modules_github_template-parts_lib_index_js-94dc7a2157c1.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-70450e-4b93df70b903.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_ref-selector_ts-52913063a0b9.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/codespaces-b419a25ee02f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-3eebbd-0763620ad7bf.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_decorators_js-node_modules_delegated-events_di-e161aa-9d41fb1b6c9e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_github_remote--3c9c82-b71ef90fbdc7.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/repositories-10217e4e5a53.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_github_catalyst_lib_inde-dbbea9-26cce2010167.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/code-menu-d6d3c94ee97e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/primer-react-99bc880bd101.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-core-25e9ddbd9991.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-lib-f1bca44e0926.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/octicons-react-cf2f2ab8dab4.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_emotion_is-prop-valid_dist_emotion-is-prop-valid_esm_js-node_modules_emo-434cb6-95f395b76298.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_stacktrace-parser_dist_s-e7dcdd-9a233856b02c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover-fn_js-55fea94174bf.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-subscriptions-menu-0e7e3f0bfc4b.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.7110f8bed75b67122d7a.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/notifications-subscriptions-menu.1bcff9205c241e99cff2.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.7110f8bed75b67122d7a.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/notifications-subscriptions-menu.1bcff9205c241e99cff2.module.css" /> <title>GitHub - nietras/Sep: World&#39;s Fastest .NET CSV Parser. Modern, minimal, fast, zero allocation, reading and writing of separated values (`csv`, `tsv` etc.). Cross-platform, trimmable and AOT/NativeAOT compatible.</title> <meta name="route-pattern" content="/:user_id/:repository" data-turbo-transient> <meta name="route-controller" content="files" data-turbo-transient> <meta name="route-action" content="disambiguate" data-turbo-transient> <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb"> <meta name="request-id" content="C8AC:29C4BF:2D425:363D2:67EEA7EB" data-pjax-transient="true"/><meta name="html-safe-nonce" content="a8fdf38f2cf39bafe27c1cbcf9fc734f1d2bcfd9ae3253c285e883d31973835c" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDOEFDOjI5QzRCRjoyRDQyNTozNjNEMjo2N0VFQTdFQiIsInZpc2l0b3JfaWQiOiIzMTgwMzk4MTMzMTAzMjA4NDI3IiwicmVnaW9uX2VkZ2UiOiJzb3V0aGVhc3Rhc2lhIiwicmVnaW9uX3JlbmRlciI6InNvdXRoZWFzdGFzaWEifQ==" data-pjax-transient="true"/><meta name="visitor-hmac" content="913d79f036bf6efd62c94b2097ba967c333b37ecec51725d9a7403c382b6735c" data-pjax-transient="true"/> <meta name="hovercard-subject-tag" content="repository:602555092" data-turbo-transient> <meta name="github-keyboard-shortcuts" content="repository,copilot" data-turbo-transient="true" /> <meta name="selected-link" value="repo_source" data-turbo-transient> <link rel="assets" href="https://github.githubassets.com/"> <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I"> <meta name="octolytics-url" content="https://collector.github.com/github/collect" /> <meta name="analytics-location" content="/&lt;user-name&gt;/&lt;repo-name&gt;" data-turbo-transient="true" /> <meta name="user-login" content=""> <meta name="viewport" content="width=device-width"> <meta name="description" content="World&#39;s Fastest .NET CSV Parser. Modern, minimal, fast, zero allocation, reading and writing of separated values (`csv`, `tsv` etc.). Cross-platform, trimmable and AOT/NativeAOT compatible. - nietras/Sep"> <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub"> <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub"> <meta property="fb:app_id" content="1401488693436528"> <meta name="apple-itunes-app" content="app-id=1477376905, app-argument=https://github.com/nietras/Sep" /> <meta name="twitter:image" content="https://repository-images.githubusercontent.com/602555092/89841962-0828-4a22-aa0e-1101d6e618f5" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="GitHub - nietras/Sep: World&#39;s Fastest .NET CSV Parser. Modern, minimal, fast, zero allocation, reading and writing of separated values (`csv`, `tsv` etc.). Cross-platform, trimmable and AOT/NativeAOT compatible." /><meta name="twitter:description" content="World&amp;amp;#39;s Fastest .NET CSV Parser. Modern, minimal, fast, zero allocation, reading and writing of separated values (`csv`, `tsv` etc.). Cross-platform, trimmable and AOT/NativeAOT compatible...." /> <meta property="og:image" content="https://repository-images.githubusercontent.com/602555092/89841962-0828-4a22-aa0e-1101d6e618f5" /><meta property="og:image:alt" content="World&amp;#39;s Fastest .NET CSV Parser. Modern, minimal, fast, zero allocation, reading and writing of separated values (`csv`, `tsv` etc.). Cross-platform, trimmable and AOT/NativeAOT compatible. - n..." /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="GitHub - nietras/Sep: World&#39;s Fastest .NET CSV Parser. Modern, minimal, fast, zero allocation, reading and writing of separated values (`csv`, `tsv` etc.). Cross-platform, trimmable and AOT/NativeAOT compatible." /><meta property="og:url" content="https://github.com/nietras/Sep" /><meta property="og:description" content="World&amp;#39;s Fastest .NET CSV Parser. Modern, minimal, fast, zero allocation, reading and writing of separated values (`csv`, `tsv` etc.). Cross-platform, trimmable and AOT/NativeAOT compatible. - n..." /> <meta name="hostname" content="github.com"> <meta name="expected-hostname" content="github.com"> <meta http-equiv="x-pjax-version" content="3e952bb711066a267b0b49367ef95c3493d9b039ac79fbfa661ee20752e979f0" data-turbo-track="reload"> <meta http-equiv="x-pjax-csp-version" content="e26f9f0ba624ee85cc7ac057d8faa8618a4f25a85eab052c33d018ac0f6b1a46" data-turbo-track="reload"> <meta http-equiv="x-pjax-css-version" content="3880f621a6450d86227686dafe66b79bb840ae1d588507e3f013719db633d34a" data-turbo-track="reload"> <meta http-equiv="x-pjax-js-version" content="0ec70cdba72737ab2972953b7a4837629d709835b35dd1133ca54fee0c127f6c" data-turbo-track="reload"> <meta name="turbo-cache-control" content="no-preview" data-turbo-transient=""> <meta data-hydrostats="publish"> <meta name="go-import" content="github.com/nietras/Sep git https://github.com/nietras/Sep.git"> <meta name="octolytics-dimension-user_id" content="10798831" /><meta name="octolytics-dimension-user_login" content="nietras" /><meta name="octolytics-dimension-repository_id" content="602555092" /><meta name="octolytics-dimension-repository_nwo" content="nietras/Sep" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="602555092" /><meta name="octolytics-dimension-repository_network_root_nwo" content="nietras/Sep" /> <link rel="canonical" href="https://github.com/nietras/Sep" data-turbo-transient> <meta name="turbo-body-classes" content="logged-out env-production page-responsive"> <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats"> <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors"> <meta name="release" content="17b228a224bc48b3bae6e5602b498d8500b0f1ef"> <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000"> <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png"> <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg" data-base-href="https://github.githubassets.com/favicons/favicon"> <meta name="theme-color" content="#1e2327"> <meta name="color-scheme" content="light dark" /> <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials"> </head> <body class="logged-out env-production page-responsive" style="word-wrap: break-word;"> <div data-turbo-body class="logged-out env-production page-responsive" style="word-wrap: break-word;"> <div class="position-relative header-wrapper js-header-wrapper "> <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a> <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full"> <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span> </span> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_ui-commands_ui-commands_ts-ad009fc6c345.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-1edadb4bd04c.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.7110f8bed75b67122d7a.module.css" /> <react-partial partial-name="keyboard-shortcuts-dialog" data-ssr="false" data-attempted-ssr="false" > <script type="application/json" data-target="react-partial.embeddedData">{"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}</script> <div data-target="react-partial.reactRoot"></div> </react-partial> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-94fd67-4898d1bf4b51.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/sessions-45d6658f8b6b.js"></script> <header class="HeaderMktg header-logged-out js-details-container js-header Details f4 py-3" role="banner" data-is-top="true" data-color-mode=light data-light-theme=light data-dark-theme=dark> <h2 class="sr-only">Navigation Menu</h2> <button type="button" class="HeaderMktg-backdrop d-lg-none border-0 position-fixed top-0 left-0 width-full height-full js-details-target" aria-label="Toggle navigation"> <span class="d-none">Toggle navigation</span> </button> <div class="d-flex flex-column flex-lg-row flex-items-center px-3 px-md-4 px-lg-5 height-full position-relative z-1"> <div class="d-flex flex-justify-between flex-items-center width-full width-lg-auto"> <div class="flex-1"> <button aria-label="Toggle navigation" aria-expanded="false" type="button" data-view-component="true" class="js-details-target js-nav-padding-recalculate js-header-menu-toggle Button--link Button--medium Button d-lg-none color-fg-inherit p-1"> <span class="Button-content"> <span class="Button-label"><div class="HeaderMenu-toggle-bar rounded my-1"></div> <div class="HeaderMenu-toggle-bar rounded my-1"></div> <div class="HeaderMenu-toggle-bar rounded my-1"></div></span> </span> </button> </div> <a class="mr-lg-3 color-fg-inherit flex-order-2 js-prevent-focus-on-mobile-nav" href="/" aria-label="Homepage" data-analytics-event="{&quot;category&quot;:&quot;Marketing nav&quot;,&quot;action&quot;:&quot;click to go to homepage&quot;,&quot;label&quot;:&quot;ref_page:Marketing;ref_cta:Logomark;ref_loc:Header&quot;}"> <svg height="32" aria-hidden="true" viewBox="0 0 24 24" version="1.1" width="32" data-view-component="true" class="octicon octicon-mark-github"> <path d="M12 1C5.9225 1 1 5.9225 1 12C1 16.8675 4.14875 20.9787 8.52125 22.4362C9.07125 22.5325 9.2775 22.2025 9.2775 21.9137C9.2775 21.6525 9.26375 20.7862 9.26375 19.865C6.5 20.3737 5.785 19.1912 5.565 18.5725C5.44125 18.2562 4.905 17.28 4.4375 17.0187C4.0525 16.8125 3.5025 16.3037 4.42375 16.29C5.29 16.2762 5.90875 17.0875 6.115 17.4175C7.105 19.0812 8.68625 18.6137 9.31875 18.325C9.415 17.61 9.70375 17.1287 10.02 16.8537C7.5725 16.5787 5.015 15.63 5.015 11.4225C5.015 10.2262 5.44125 9.23625 6.1425 8.46625C6.0325 8.19125 5.6475 7.06375 6.2525 5.55125C6.2525 5.55125 7.17375 5.2625 9.2775 6.67875C10.1575 6.43125 11.0925 6.3075 12.0275 6.3075C12.9625 6.3075 13.8975 6.43125 14.7775 6.67875C16.8813 5.24875 17.8025 5.55125 17.8025 5.55125C18.4075 7.06375 18.0225 8.19125 17.9125 8.46625C18.6138 9.23625 19.04 10.2125 19.04 11.4225C19.04 15.6437 16.4688 16.5787 14.0213 16.8537C14.42 17.1975 14.7638 17.8575 14.7638 18.8887C14.7638 20.36 14.75 21.5425 14.75 21.9137C14.75 22.2025 14.9563 22.5462 15.5063 22.4362C19.8513 20.9787 23 16.8537 23 12C23 5.9225 18.0775 1 12 1Z"></path> </svg> </a> <div class="flex-1 flex-order-2 text-right"> <a href="/login?return_to=https%3A%2F%2Fgithub.com%2Fnietras%2FSep" class="HeaderMenu-link HeaderMenu-button d-inline-flex d-lg-none flex-order-1 f5 no-underline border color-border-default rounded-2 px-2 py-1 color-fg-inherit js-prevent-focus-on-mobile-nav" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/nietras/Sep&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="80ac9d588f15dd4faf8b95eba66341e12c6a61028de1da4f8072075ab12006ce" data-analytics-event="{&quot;category&quot;:&quot;Marketing nav&quot;,&quot;action&quot;:&quot;click to Sign in&quot;,&quot;label&quot;:&quot;ref_page:Marketing;ref_cta:Sign in;ref_loc:Header&quot;}" > Sign in </a> </div> </div> <div class="HeaderMenu js-header-menu height-fit position-lg-relative d-lg-flex flex-column flex-auto top-0"> <div class="HeaderMenu-wrapper d-flex flex-column flex-self-start flex-lg-row flex-auto rounded rounded-lg-0"> <nav class="HeaderMenu-nav" aria-label="Global"> <ul class="d-lg-flex list-style-none"> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Product <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;github_copilot&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;github_copilot_link_product_navbar&quot;}" href="https://github.com/features/copilot"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-copilot color-fg-subtle mr-3"> <path d="M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"></path><path d="M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z"></path> </svg> <div> <div class="color-fg-default h4">GitHub Copilot</div> Write better code with AI </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;github_advanced_security_link_product_navbar&quot;}" href="https://github.com/security/advanced-security"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-shield-check color-fg-subtle mr-3"> <path d="M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z"></path><path d="m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z"></path> </svg> <div> <div class="color-fg-default h4">GitHub Advanced Security</div> Find and fix vulnerabilities </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;actions&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;actions_link_product_navbar&quot;}" href="https://github.com/features/actions"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-workflow color-fg-subtle mr-3"> <path d="M1 3a2 2 0 0 1 2-2h6.5a2 2 0 0 1 2 2v6.5a2 2 0 0 1-2 2H7v4.063C7 16.355 7.644 17 8.438 17H12.5v-2.5a2 2 0 0 1 2-2H21a2 2 0 0 1 2 2V21a2 2 0 0 1-2 2h-6.5a2 2 0 0 1-2-2v-2.5H8.437A2.939 2.939 0 0 1 5.5 15.562V11.5H3a2 2 0 0 1-2-2Zm2-.5a.5.5 0 0 0-.5.5v6.5a.5.5 0 0 0 .5.5h6.5a.5.5 0 0 0 .5-.5V3a.5.5 0 0 0-.5-.5ZM14.5 14a.5.5 0 0 0-.5.5V21a.5.5 0 0 0 .5.5H21a.5.5 0 0 0 .5-.5v-6.5a.5.5 0 0 0-.5-.5Z"></path> </svg> <div> <div class="color-fg-default h4">Actions</div> Automate any workflow </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;codespaces&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;codespaces_link_product_navbar&quot;}" href="https://github.com/features/codespaces"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-codespaces color-fg-subtle mr-3"> <path d="M3.5 3.75C3.5 2.784 4.284 2 5.25 2h13.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 18.75 13H5.25a1.75 1.75 0 0 1-1.75-1.75Zm-2 12c0-.966.784-1.75 1.75-1.75h17.5c.966 0 1.75.784 1.75 1.75v4a1.75 1.75 0 0 1-1.75 1.75H3.25a1.75 1.75 0 0 1-1.75-1.75ZM5.25 3.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h13.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Zm-2 12a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h17.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25Z"></path><path d="M10 17.75a.75.75 0 0 1 .75-.75h6.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path> </svg> <div> <div class="color-fg-default h4">Codespaces</div> Instant dev environments </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;issues&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;issues_link_product_navbar&quot;}" href="https://github.com/features/issues"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-issue-opened color-fg-subtle mr-3"> <path d="M12 1c6.075 0 11 4.925 11 11s-4.925 11-11 11S1 18.075 1 12 5.925 1 12 1ZM2.5 12a9.5 9.5 0 0 0 9.5 9.5 9.5 9.5 0 0 0 9.5-9.5A9.5 9.5 0 0 0 12 2.5 9.5 9.5 0 0 0 2.5 12Zm9.5 2a2 2 0 1 1-.001-3.999A2 2 0 0 1 12 14Z"></path> </svg> <div> <div class="color-fg-default h4">Issues</div> Plan and track work </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;code_review&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;code_review_link_product_navbar&quot;}" href="https://github.com/features/code-review"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-code-review color-fg-subtle mr-3"> <path d="M10.3 6.74a.75.75 0 0 1-.04 1.06l-2.908 2.7 2.908 2.7a.75.75 0 1 1-1.02 1.1l-3.5-3.25a.75.75 0 0 1 0-1.1l3.5-3.25a.75.75 0 0 1 1.06.04Zm3.44 1.06a.75.75 0 1 1 1.02-1.1l3.5 3.25a.75.75 0 0 1 0 1.1l-3.5 3.25a.75.75 0 1 1-1.02-1.1l2.908-2.7-2.908-2.7Z"></path><path d="M1.5 4.25c0-.966.784-1.75 1.75-1.75h17.5c.966 0 1.75.784 1.75 1.75v12.5a1.75 1.75 0 0 1-1.75 1.75h-9.69l-3.573 3.573A1.458 1.458 0 0 1 5 21.043V18.5H3.25a1.75 1.75 0 0 1-1.75-1.75ZM3.25 4a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h2.5a.75.75 0 0 1 .75.75v3.19l3.72-3.72a.749.749 0 0 1 .53-.22h10a.25.25 0 0 0 .25-.25V4.25a.25.25 0 0 0-.25-.25Z"></path> </svg> <div> <div class="color-fg-default h4">Code Review</div> Manage code changes </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;discussions&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;discussions_link_product_navbar&quot;}" href="https://github.com/features/discussions"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-comment-discussion color-fg-subtle mr-3"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z"></path><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z"></path> </svg> <div> <div class="color-fg-default h4">Discussions</div> Collaborate outside of code </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;code_search&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;code_search_link_product_navbar&quot;}" href="https://github.com/features/code-search"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-code-square color-fg-subtle mr-3"> <path d="M10.3 8.24a.75.75 0 0 1-.04 1.06L7.352 12l2.908 2.7a.75.75 0 1 1-1.02 1.1l-3.5-3.25a.75.75 0 0 1 0-1.1l3.5-3.25a.75.75 0 0 1 1.06.04Zm3.44 1.06a.75.75 0 1 1 1.02-1.1l3.5 3.25a.75.75 0 0 1 0 1.1l-3.5 3.25a.75.75 0 1 1-1.02-1.1l2.908-2.7-2.908-2.7Z"></path><path d="M2 3.75C2 2.784 2.784 2 3.75 2h16.5c.966 0 1.75.784 1.75 1.75v16.5A1.75 1.75 0 0 1 20.25 22H3.75A1.75 1.75 0 0 1 2 20.25Zm1.75-.25a.25.25 0 0 0-.25.25v16.5c0 .138.112.25.25.25h16.5a.25.25 0 0 0 .25-.25V3.75a.25.25 0 0 0-.25-.25Z"></path> </svg> <div> <div class="color-fg-default h4">Code Search</div> Find more, search less </div> </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="product-explore-heading">Explore</span> <ul class="list-style-none f5" aria-labelledby="product-explore-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;all_features&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;all_features_link_product_navbar&quot;}" href="https://github.com/features"> All features </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;documentation&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;documentation_link_product_navbar&quot;}" href="https://docs.github.com"> Documentation <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;github_skills&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;github_skills_link_product_navbar&quot;}" href="https://skills.github.com"> GitHub Skills <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;blog&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;blog_link_product_navbar&quot;}" href="https://github.blog"> Blog <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Solutions <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 pb-lg-3 mb-3 mb-lg-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-company-size-heading">By company size</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-company-size-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;enterprises&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;enterprises_link_solutions_navbar&quot;}" href="https://github.com/enterprise"> Enterprises </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;small_and_medium_teams&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;small_and_medium_teams_link_solutions_navbar&quot;}" href="https://github.com/team"> Small and medium teams </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;startups&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;startups_link_solutions_navbar&quot;}" href="https://github.com/enterprise/startups"> Startups </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;nonprofits&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;nonprofits_link_solutions_navbar&quot;}" href="/solutions/industry/nonprofits"> Nonprofits </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-use-case-heading">By use case</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-use-case-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;devsecops&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;devsecops_link_solutions_navbar&quot;}" href="/solutions/use-case/devsecops"> DevSecOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;devops&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;devops_link_solutions_navbar&quot;}" href="/solutions/use-case/devops"> DevOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;ci_cd&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;ci_cd_link_solutions_navbar&quot;}" href="/solutions/use-case/ci-cd"> CI/CD </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;view_all_use_cases&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;view_all_use_cases_link_solutions_navbar&quot;}" href="/solutions/use-case"> View all use cases </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-industry-heading">By industry</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-industry-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;healthcare&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;healthcare_link_solutions_navbar&quot;}" href="/solutions/industry/healthcare"> Healthcare </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;financial_services&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;financial_services_link_solutions_navbar&quot;}" href="/solutions/industry/financial-services"> Financial services </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;manufacturing&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;manufacturing_link_solutions_navbar&quot;}" href="/solutions/industry/manufacturing"> Manufacturing </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;government&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;government_link_solutions_navbar&quot;}" href="/solutions/industry/government"> Government </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;view_all_industries&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;view_all_industries_link_solutions_navbar&quot;}" href="/solutions/industry"> View all industries </a></li> </ul> </div> </div> <div class="HeaderMenu-trailing-link rounded-bottom-2 flex-shrink-0 mt-lg-4 px-lg-4 py-4 py-lg-3 f5 text-semibold"> <a href="/solutions"> View all solutions <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-right HeaderMenu-trailing-link-icon"> <path d="M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z"></path> </svg> </a> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Resources <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="resources-topics-heading">Topics</span> <ul class="list-style-none f5" aria-labelledby="resources-topics-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;ai&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;ai_link_resources_navbar&quot;}" href="/resources/articles/ai"> AI </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;devops&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;devops_link_resources_navbar&quot;}" href="/resources/articles/devops"> DevOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;security&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;security_link_resources_navbar&quot;}" href="/resources/articles/security"> Security </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;software_development&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;software_development_link_resources_navbar&quot;}" href="/resources/articles/software-development"> Software Development </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;view_all&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;view_all_link_resources_navbar&quot;}" href="/resources/articles"> View all </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="resources-explore-heading">Explore</span> <ul class="list-style-none f5" aria-labelledby="resources-explore-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;learning_pathways&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;learning_pathways_link_resources_navbar&quot;}" href="https://resources.github.com/learn/pathways"> Learning Pathways <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;events_amp_webinars&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;events_amp_webinars_link_resources_navbar&quot;}" href="https://resources.github.com"> Events &amp; Webinars <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;ebooks_amp_whitepapers&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;ebooks_amp_whitepapers_link_resources_navbar&quot;}" href="https://github.com/resources/whitepapers"> Ebooks &amp; Whitepapers </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;customer_stories&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;customer_stories_link_resources_navbar&quot;}" href="https://github.com/customer-stories"> Customer Stories </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;partners&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;partners_link_resources_navbar&quot;}" href="https://partner.github.com"> Partners <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;executive_insights&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;executive_insights_link_resources_navbar&quot;}" href="https://github.com/solutions/executive-insights"> Executive Insights </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Open Source <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 px-lg-4"> <div class="HeaderMenu-column"> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;github_sponsors&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;github_sponsors_link_open_source_navbar&quot;}" href="/sponsors"> <div> <div class="color-fg-default h4">GitHub Sponsors</div> Fund open source developers </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;the_readme_project&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;the_readme_project_link_open_source_navbar&quot;}" href="https://github.com/readme"> <div> <div class="color-fg-default h4">The ReadME Project</div> GitHub community articles </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="open-source-repositories-heading">Repositories</span> <ul class="list-style-none f5" aria-labelledby="open-source-repositories-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;topics&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;topics_link_open_source_navbar&quot;}" href="https://github.com/topics"> Topics </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;trending&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;trending_link_open_source_navbar&quot;}" href="https://github.com/trending"> Trending </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;collections&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;collections_link_open_source_navbar&quot;}" href="https://github.com/collections"> Collections </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Enterprise <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 px-lg-4"> <div class="HeaderMenu-column"> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;enterprise_platform&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;enterprise_platform_link_enterprise_navbar&quot;}" href="/enterprise"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-stack color-fg-subtle mr-3"> <path d="M11.063 1.456a1.749 1.749 0 0 1 1.874 0l8.383 5.316a1.751 1.751 0 0 1 0 2.956l-8.383 5.316a1.749 1.749 0 0 1-1.874 0L2.68 9.728a1.751 1.751 0 0 1 0-2.956Zm1.071 1.267a.25.25 0 0 0-.268 0L3.483 8.039a.25.25 0 0 0 0 .422l8.383 5.316a.25.25 0 0 0 .268 0l8.383-5.316a.25.25 0 0 0 0-.422Z"></path><path d="M1.867 12.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z"></path><path d="M1.867 16.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z"></path> </svg> <div> <div class="color-fg-default h4">Enterprise platform</div> AI-powered developer platform </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="enterprise-available-add-ons-heading">Available add-ons</span> <ul class="list-style-none f5" aria-labelledby="enterprise-available-add-ons-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;github_advanced_security_link_enterprise_navbar&quot;}" href="https://github.com/security/advanced-security"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-shield-check color-fg-subtle mr-3"> <path d="M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z"></path><path d="m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z"></path> </svg> <div> <div class="color-fg-default h4">GitHub Advanced Security</div> Enterprise-grade security features </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;copilot_for_business&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;copilot_for_business_link_enterprise_navbar&quot;}" href="/features/copilot/copilot-business"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-copilot color-fg-subtle mr-3"> <path d="M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"></path><path d="M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z"></path> </svg> <div> <div class="color-fg-default h4">Copilot for business</div> Enterprise-grade AI features </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;premium_support&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;premium_support_link_enterprise_navbar&quot;}" href="/premium-support"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-comment-discussion color-fg-subtle mr-3"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z"></path><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z"></path> </svg> <div> <div class="color-fg-default h4">Premium Support</div> Enterprise-grade 24/7 support </div> </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <a class="HeaderMenu-link no-underline px-0 px-lg-2 py-3 py-lg-2 d-block d-lg-inline-block" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;pricing&quot;,&quot;context&quot;:&quot;global&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;pricing_link_global_navbar&quot;}" href="https://github.com/pricing">Pricing</a> </li> </ul> </nav> <div class="d-flex flex-column flex-lg-row width-full flex-justify-end flex-lg-items-center text-center mt-3 mt-lg-0 text-lg-left ml-lg-3"> <qbsearch-input class="search-input" data-scope="repo:nietras/Sep" data-custom-scopes-path="/search/custom_scopes" data-delete-custom-scopes-csrf="9qdrD742qt-z4tjhdbekBVFoZ0vsByO43rOPc-KlbaHnwh5-3YVTnV3eC-egbu8GAfQcuID5LxxybKl6E5VFmQ" data-max-custom-scopes="10" data-header-redesign-enabled="false" data-initial-value="" data-blackbird-suggestions-path="/search/suggestions" data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations" data-current-repository="nietras/Sep" data-current-org="" data-current-owner="nietras" data-logged-in="false" data-copilot-chat-enabled="false" data-nl-search-enabled="false" data-retain-scroll-position="true"> <div class="search-input-container search-with-dialog position-relative d-flex flex-row flex-items-center mr-4 rounded" data-action="click:qbsearch-input#searchInputContainerClicked" > <button type="button" class="header-search-button placeholder input-button form-control d-flex flex-1 flex-self-stretch flex-items-center no-wrap width-full py-0 pl-2 pr-0 text-left border-0 box-shadow-none" data-target="qbsearch-input.inputButton" aria-label="Search or jump to…" aria-haspopup="dialog" placeholder="Search or jump to..." data-hotkey=s,/ autocapitalize="off" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;searchbar&quot;,&quot;context&quot;:&quot;global&quot;,&quot;tag&quot;:&quot;input&quot;,&quot;label&quot;:&quot;searchbar_input_global_navbar&quot;}" data-action="click:qbsearch-input#handleExpand" > <div class="mr-2 color-fg-muted"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </div> <span class="flex-1" data-target="qbsearch-input.inputButtonText">Search or jump to...</span> <div class="d-flex" data-target="qbsearch-input.hotkeyIndicator"> <svg xmlns="http://www.w3.org/2000/svg" width="22" height="20" aria-hidden="true" class="mr-1"><path fill="none" stroke="#979A9C" opacity=".4" d="M3.5.5h12c1.7 0 3 1.3 3 3v13c0 1.7-1.3 3-3 3h-12c-1.7 0-3-1.3-3-3v-13c0-1.7 1.3-3 3-3z"></path><path fill="#979A9C" d="M11.8 6L8 15.1h-.9L10.8 6h1z"></path></svg> </div> </button> <input type="hidden" name="type" class="js-site-search-type-field"> <div class="Overlay--hidden " data-modal-dialog-overlay> <modal-dialog data-action="close:qbsearch-input#handleClose cancel:qbsearch-input#handleClose" data-target="qbsearch-input.searchSuggestionsDialog" role="dialog" id="search-suggestions-dialog" aria-modal="true" aria-labelledby="search-suggestions-dialog-header" data-view-component="true" class="Overlay Overlay--width-large Overlay--height-auto"> <h1 id="search-suggestions-dialog-header" class="sr-only">Search code, repositories, users, issues, pull requests...</h1> <div class="Overlay-body Overlay-body--paddingNone"> <div data-view-component="true"> <div class="search-suggestions position-fixed width-full color-shadow-large border color-fg-default color-bg-default overflow-hidden d-flex flex-column query-builder-container" style="border-radius: 12px;" data-target="qbsearch-input.queryBuilderContainer" hidden > <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="query-builder-test-form" action="" accept-charset="UTF-8" method="get"> <query-builder data-target="qbsearch-input.queryBuilder" id="query-builder-query-builder-test" data-filter-key=":" data-view-component="true" class="QueryBuilder search-query-builder"> <div class="FormControl FormControl--fullWidth"> <label id="query-builder-test-label" for="query-builder-test" class="FormControl-label sr-only"> Search </label> <div class="QueryBuilder-StyledInput width-fit " data-target="query-builder.styledInput" > <span id="query-builder-test-leadingvisual-wrap" class="FormControl-input-leadingVisualWrap QueryBuilder-leadingVisualWrap"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search FormControl-input-leadingVisual"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </span> <div data-target="query-builder.styledInputContainer" class="QueryBuilder-StyledInputContainer"> <div aria-hidden="true" class="QueryBuilder-StyledInputContent" data-target="query-builder.styledInputContent" ></div> <div class="QueryBuilder-InputWrapper"> <div aria-hidden="true" class="QueryBuilder-Sizer" data-target="query-builder.sizer"></div> <input id="query-builder-test" name="query-builder-test" value="" autocomplete="off" type="text" role="combobox" spellcheck="false" aria-expanded="false" aria-describedby="validation-f759e7ce-31e1-4111-9a9b-1b2abe3baca2" data-target="query-builder.input" data-action=" input:query-builder#inputChange blur:query-builder#inputBlur keydown:query-builder#inputKeydown focus:query-builder#inputFocus " data-view-component="true" class="FormControl-input QueryBuilder-Input FormControl-medium" /> </div> </div> <span class="sr-only" id="query-builder-test-clear">Clear</span> <button role="button" id="query-builder-test-clear-button" aria-labelledby="query-builder-test-clear query-builder-test-label" data-target="query-builder.clearButton" data-action=" click:query-builder#clear focus:query-builder#clearButtonFocus blur:query-builder#clearButtonBlur " variant="small" hidden="hidden" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium mr-1 px-2 py-0 d-flex flex-items-center rounded-1 color-fg-muted"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x-circle-fill Button-visual"> <path d="M2.343 13.657A8 8 0 1 1 13.658 2.343 8 8 0 0 1 2.343 13.657ZM6.03 4.97a.751.751 0 0 0-1.042.018.751.751 0 0 0-.018 1.042L6.94 8 4.97 9.97a.749.749 0 0 0 .326 1.275.749.749 0 0 0 .734-.215L8 9.06l1.97 1.97a.749.749 0 0 0 1.275-.326.749.749 0 0 0-.215-.734L9.06 8l1.97-1.97a.749.749 0 0 0-.326-1.275.749.749 0 0 0-.734.215L8 6.94Z"></path> </svg> </button> </div> <template id="search-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </template> <template id="code-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </template> <template id="file-code-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-file-code"> <path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path> </svg> </template> <template id="history-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-history"> <path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path> </svg> </template> <template id="repo-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo"> <path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.495 2.495 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.486 2.486 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z"></path> </svg> </template> <template id="bookmark-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bookmark"> <path d="M3 2.75C3 1.784 3.784 1 4.75 1h6.5c.966 0 1.75.784 1.75 1.75v11.5a.75.75 0 0 1-1.227.579L8 11.722l-3.773 3.107A.751.751 0 0 1 3 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.91l3.023-2.489a.75.75 0 0 1 .954 0l3.023 2.49V2.75a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="plus-circle-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-plus-circle"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm7.25-3.25v2.5h2.5a.75.75 0 0 1 0 1.5h-2.5v2.5a.75.75 0 0 1-1.5 0v-2.5h-2.5a.75.75 0 0 1 0-1.5h2.5v-2.5a.75.75 0 0 1 1.5 0Z"></path> </svg> </template> <template id="circle-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill"> <path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path> </svg> </template> <template id="trash-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-trash"> <path d="M11 1.75V3h2.25a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75ZM4.496 6.675l.66 6.6a.25.25 0 0 0 .249.225h5.19a.25.25 0 0 0 .249-.225l.66-6.6a.75.75 0 0 1 1.492.149l-.66 6.6A1.748 1.748 0 0 1 10.595 15h-5.19a1.75 1.75 0 0 1-1.741-1.575l-.66-6.6a.75.75 0 1 1 1.492-.15ZM6.5 1.75V3h3V1.75a.25.25 0 0 0-.25-.25h-2.5a.25.25 0 0 0-.25.25Z"></path> </svg> </template> <template id="team-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-people"> <path d="M2 5.5a3.5 3.5 0 1 1 5.898 2.549 5.508 5.508 0 0 1 3.034 4.084.75.75 0 1 1-1.482.235 4 4 0 0 0-7.9 0 .75.75 0 0 1-1.482-.236A5.507 5.507 0 0 1 3.102 8.05 3.493 3.493 0 0 1 2 5.5ZM11 4a3.001 3.001 0 0 1 2.22 5.018 5.01 5.01 0 0 1 2.56 3.012.749.749 0 0 1-.885.954.752.752 0 0 1-.549-.514 3.507 3.507 0 0 0-2.522-2.372.75.75 0 0 1-.574-.73v-.352a.75.75 0 0 1 .416-.672A1.5 1.5 0 0 0 11 5.5.75.75 0 0 1 11 4Zm-5.5-.5a2 2 0 1 0-.001 3.999A2 2 0 0 0 5.5 3.5Z"></path> </svg> </template> <template id="project-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project"> <path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25ZM11.75 3a.75.75 0 0 1 .75.75v7.5a.75.75 0 0 1-1.5 0v-7.5a.75.75 0 0 1 .75-.75Zm-8.25.75a.75.75 0 0 1 1.5 0v5.5a.75.75 0 0 1-1.5 0ZM8 3a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 3Z"></path> </svg> </template> <template id="pencil-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pencil"> <path d="M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.081-.286.235-.547.445-.758l8.61-8.61Zm.176 4.823L9.75 4.81l-6.286 6.287a.253.253 0 0 0-.064.108l-.558 1.953 1.953-.558a.253.253 0 0 0 .108-.064Zm1.238-3.763a.25.25 0 0 0-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 0 0 0-.354Z"></path> </svg> </template> <template id="copilot-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copilot"> <path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path> </svg> </template> <template id="copilot-error-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copilot-error"> <path d="M16 11.24c0 .112-.072.274-.21.467L13 9.688V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-.198 0-.388-.009-.571-.029L6.833 5.226a4.01 4.01 0 0 0 .17-.782c.117-.935-.037-1.395-.241-1.614-.193-.206-.637-.413-1.682-.297-.683.076-1.115.231-1.395.415l-1.257-.91c.579-.564 1.413-.877 2.485-.996 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095Zm-5.083-8.707c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Zm2.511 11.074c-1.393.776-3.272 1.428-5.43 1.428-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.18-.455-.241-.963-.252-1.475L.31 4.107A.747.747 0 0 1 0 3.509V3.49a.748.748 0 0 1 .625-.73c.156-.026.306.047.435.139l14.667 10.578a.592.592 0 0 1 .227.264.752.752 0 0 1 .046.249v.022a.75.75 0 0 1-1.19.596Zm-1.367-.991L5.635 7.964a5.128 5.128 0 0 1-.889.073c-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433 1.539 0 3.089-.505 4.063-.934Z"></path> </svg> </template> <template id="workflow-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-workflow"> <path d="M0 1.75C0 .784.784 0 1.75 0h3.5C6.216 0 7 .784 7 1.75v3.5A1.75 1.75 0 0 1 5.25 7H4v4a1 1 0 0 0 1 1h4v-1.25C9 9.784 9.784 9 10.75 9h3.5c.966 0 1.75.784 1.75 1.75v3.5A1.75 1.75 0 0 1 14.25 16h-3.5A1.75 1.75 0 0 1 9 14.25v-.75H5A2.5 2.5 0 0 1 2.5 11V7h-.75A1.75 1.75 0 0 1 0 5.25Zm1.75-.25a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Zm9 9a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="book-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-book"> <path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path> </svg> </template> <template id="code-review-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-review"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 13H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25v-8.5C0 1.784.784 1 1.75 1ZM1.5 2.75v8.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-8.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Zm5.28 1.72a.75.75 0 0 1 0 1.06L5.31 7l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.75.75 0 0 1 1.06 0Zm2.44 0a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L10.69 7 9.22 5.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </template> <template id="codespaces-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-codespaces"> <path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path> </svg> </template> <template id="comment-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment"> <path d="M1 2.75C1 1.784 1.784 1 2.75 1h10.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 13.25 12H9.06l-2.573 2.573A1.458 1.458 0 0 1 4 13.543V12H2.75A1.75 1.75 0 0 1 1 10.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h4.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="comment-discussion-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment-discussion"> <path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path> </svg> </template> <template id="organization-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-organization"> <path d="M1.75 16A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0h8.5C11.216 0 12 .784 12 1.75v12.5c0 .085-.006.168-.018.25h2.268a.25.25 0 0 0 .25-.25V8.285a.25.25 0 0 0-.111-.208l-1.055-.703a.749.749 0 1 1 .832-1.248l1.055.703c.487.325.779.871.779 1.456v5.965A1.75 1.75 0 0 1 14.25 16h-3.5a.766.766 0 0 1-.197-.026c-.099.017-.2.026-.303.026h-3a.75.75 0 0 1-.75-.75V14h-1v1.25a.75.75 0 0 1-.75.75Zm-.25-1.75c0 .138.112.25.25.25H4v-1.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 .75.75v1.25h2.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM3.75 6h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 3.75A.75.75 0 0 1 3.75 3h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 3.75Zm4 3A.75.75 0 0 1 7.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 7 6.75ZM7.75 3h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 9.75A.75.75 0 0 1 3.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 9.75ZM7.75 9h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z"></path> </svg> </template> <template id="rocket-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-rocket"> <path d="M14.064 0h.186C15.216 0 16 .784 16 1.75v.186a8.752 8.752 0 0 1-2.564 6.186l-.458.459c-.314.314-.641.616-.979.904v3.207c0 .608-.315 1.172-.833 1.49l-2.774 1.707a.749.749 0 0 1-1.11-.418l-.954-3.102a1.214 1.214 0 0 1-.145-.125L3.754 9.816a1.218 1.218 0 0 1-.124-.145L.528 8.717a.749.749 0 0 1-.418-1.11l1.71-2.774A1.748 1.748 0 0 1 3.31 4h3.204c.288-.338.59-.665.904-.979l.459-.458A8.749 8.749 0 0 1 14.064 0ZM8.938 3.623h-.002l-.458.458c-.76.76-1.437 1.598-2.02 2.5l-1.5 2.317 2.143 2.143 2.317-1.5c.902-.583 1.74-1.26 2.499-2.02l.459-.458a7.25 7.25 0 0 0 2.123-5.127V1.75a.25.25 0 0 0-.25-.25h-.186a7.249 7.249 0 0 0-5.125 2.123ZM3.56 14.56c-.732.732-2.334 1.045-3.005 1.148a.234.234 0 0 1-.201-.064.234.234 0 0 1-.064-.201c.103-.671.416-2.273 1.15-3.003a1.502 1.502 0 1 1 2.12 2.12Zm6.94-3.935c-.088.06-.177.118-.266.175l-2.35 1.521.548 1.783 1.949-1.2a.25.25 0 0 0 .119-.213ZM3.678 8.116 5.2 5.766c.058-.09.117-.178.176-.266H3.309a.25.25 0 0 0-.213.119l-1.2 1.95ZM12 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> </template> <template id="shield-check-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield-check"> <path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </template> <template id="heart-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart"> <path d="m8 14.25.345.666a.75.75 0 0 1-.69 0l-.008-.004-.018-.01a7.152 7.152 0 0 1-.31-.17 22.055 22.055 0 0 1-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.066 22.066 0 0 1-3.744 2.584l-.018.01-.006.003h-.002ZM4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.58 20.58 0 0 0 8 13.393a20.58 20.58 0 0 0 3.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.749.749 0 0 1-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5Z"></path> </svg> </template> <template id="server-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-server"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v4c0 .372-.116.717-.314 1 .198.283.314.628.314 1v4a1.75 1.75 0 0 1-1.75 1.75H1.75A1.75 1.75 0 0 1 0 12.75v-4c0-.358.109-.707.314-1a1.739 1.739 0 0 1-.314-1v-4C0 1.784.784 1 1.75 1ZM1.5 2.75v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Zm.25 5.75a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25ZM7 4.75A.75.75 0 0 1 7.75 4h4.5a.75.75 0 0 1 0 1.5h-4.5A.75.75 0 0 1 7 4.75ZM7.75 10h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM3 4.75A.75.75 0 0 1 3.75 4h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 4.75ZM3.75 10h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z"></path> </svg> </template> <template id="globe-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-globe"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM5.78 8.75a9.64 9.64 0 0 0 1.363 4.177c.255.426.542.832.857 1.215.245-.296.551-.705.857-1.215A9.64 9.64 0 0 0 10.22 8.75Zm4.44-1.5a9.64 9.64 0 0 0-1.363-4.177c-.307-.51-.612-.919-.857-1.215a9.927 9.927 0 0 0-.857 1.215A9.64 9.64 0 0 0 5.78 7.25Zm-5.944 1.5H1.543a6.507 6.507 0 0 0 4.666 5.5c-.123-.181-.24-.365-.352-.552-.715-1.192-1.437-2.874-1.581-4.948Zm-2.733-1.5h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.507 6.507 0 0 0-4.666 5.5Zm10.181 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.507 6.507 0 0 0 4.666-5.5Zm2.733-1.5a6.507 6.507 0 0 0-4.666-5.5c.123.181.24.365.353.552.714 1.192 1.436 2.874 1.58 4.948Z"></path> </svg> </template> <template id="issue-opened-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened"> <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path> </svg> </template> <template id="device-mobile-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-mobile"> <path d="M3.75 0h8.5C13.216 0 14 .784 14 1.75v12.5A1.75 1.75 0 0 1 12.25 16h-8.5A1.75 1.75 0 0 1 2 14.25V1.75C2 .784 2.784 0 3.75 0ZM3.5 1.75v12.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM8 13a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> </template> <template id="package-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-package"> <path d="m8.878.392 5.25 3.045c.54.314.872.89.872 1.514v6.098a1.75 1.75 0 0 1-.872 1.514l-5.25 3.045a1.75 1.75 0 0 1-1.756 0l-5.25-3.045A1.75 1.75 0 0 1 1 11.049V4.951c0-.624.332-1.201.872-1.514L7.122.392a1.75 1.75 0 0 1 1.756 0ZM7.875 1.69l-4.63 2.685L8 7.133l4.755-2.758-4.63-2.685a.248.248 0 0 0-.25 0ZM2.5 5.677v5.372c0 .09.047.171.125.216l4.625 2.683V8.432Zm6.25 8.271 4.625-2.683a.25.25 0 0 0 .125-.216V5.677L8.75 8.432Z"></path> </svg> </template> <template id="credit-card-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-credit-card"> <path d="M10.75 9a.75.75 0 0 0 0 1.5h1.5a.75.75 0 0 0 0-1.5h-1.5Z"></path><path d="M0 3.75C0 2.784.784 2 1.75 2h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 14H1.75A1.75 1.75 0 0 1 0 12.25ZM14.5 6.5h-13v5.75c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25Zm0-2.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25V5h13Z"></path> </svg> </template> <template id="play-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> </template> <template id="gift-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-gift"> <path d="M2 2.75A2.75 2.75 0 0 1 4.75 0c.983 0 1.873.42 2.57 1.232.268.318.497.668.68 1.042.183-.375.411-.725.68-1.044C9.376.42 10.266 0 11.25 0a2.75 2.75 0 0 1 2.45 4h.55c.966 0 1.75.784 1.75 1.75v2c0 .698-.409 1.301-1 1.582v4.918A1.75 1.75 0 0 1 13.25 16H2.75A1.75 1.75 0 0 1 1 14.25V9.332C.409 9.05 0 8.448 0 7.75v-2C0 4.784.784 4 1.75 4h.55c-.192-.375-.3-.8-.3-1.25ZM7.25 9.5H2.5v4.75c0 .138.112.25.25.25h4.5Zm1.5 0v5h4.5a.25.25 0 0 0 .25-.25V9.5Zm0-4V8h5.5a.25.25 0 0 0 .25-.25v-2a.25.25 0 0 0-.25-.25Zm-7 0a.25.25 0 0 0-.25.25v2c0 .138.112.25.25.25h5.5V5.5h-5.5Zm3-4a1.25 1.25 0 0 0 0 2.5h2.309c-.233-.818-.542-1.401-.878-1.793-.43-.502-.915-.707-1.431-.707ZM8.941 4h2.309a1.25 1.25 0 0 0 0-2.5c-.516 0-1 .205-1.43.707-.337.392-.646.975-.879 1.793Z"></path> </svg> </template> <template id="code-square-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-square"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </template> <template id="device-desktop-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-desktop"> <path d="M14.25 1c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 14.25 12h-3.727c.099 1.041.52 1.872 1.292 2.757A.752.752 0 0 1 11.25 16h-6.5a.75.75 0 0 1-.565-1.243c.772-.885 1.192-1.716 1.292-2.757H1.75A1.75 1.75 0 0 1 0 10.25v-7.5C0 1.784.784 1 1.75 1ZM1.75 2.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25ZM9.018 12H6.982a5.72 5.72 0 0 1-.765 2.5h3.566a5.72 5.72 0 0 1-.765-2.5Z"></path> </svg> </template> <div class="position-relative"> <ul role="listbox" class="ActionListWrap QueryBuilder-ListWrap" aria-label="Suggestions" data-action=" combobox-commit:query-builder#comboboxCommit mousedown:query-builder#resultsMousedown " data-target="query-builder.resultsList" data-persist-list=false id="query-builder-test-results" ></ul> </div> <div class="FormControl-inlineValidation" id="validation-f759e7ce-31e1-4111-9a9b-1b2abe3baca2" hidden="hidden"> <span class="FormControl-inlineValidation--visual"> <svg aria-hidden="true" height="12" viewBox="0 0 12 12" version="1.1" width="12" data-view-component="true" class="octicon octicon-alert-fill"> <path d="M4.855.708c.5-.896 1.79-.896 2.29 0l4.675 8.351a1.312 1.312 0 0 1-1.146 1.954H1.33A1.313 1.313 0 0 1 .183 9.058ZM7 7V3H5v4Zm-1 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"></path> </svg> </span> <span></span> </div> </div> <div data-target="query-builder.screenReaderFeedback" aria-live="polite" aria-atomic="true" class="sr-only"></div> </query-builder></form> <div class="d-flex flex-row color-fg-muted px-3 text-small color-bg-default search-feedback-prompt"> <a target="_blank" href="https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax" data-view-component="true" class="Link color-fg-accent text-normal ml-2">Search syntax tips</a> <div class="d-flex flex-1"></div> </div> </div> </div> </div> </modal-dialog></div> </div> <div data-action="click:qbsearch-input#retract" class="dark-backdrop position-fixed" hidden data-target="qbsearch-input.darkBackdrop"></div> <div class="color-fg-default"> <dialog-helper> <dialog data-target="qbsearch-input.feedbackDialog" data-action="close:qbsearch-input#handleDialogClose cancel:qbsearch-input#handleDialogClose" id="feedback-dialog" aria-modal="true" aria-labelledby="feedback-dialog-title" aria-describedby="feedback-dialog-description" data-view-component="true" class="Overlay Overlay-whenNarrow Overlay--size-medium Overlay--motion-scaleFade Overlay--disableScroll"> <div data-view-component="true" class="Overlay-header"> <div class="Overlay-headerContentWrap"> <div class="Overlay-titleWrap"> <h1 class="Overlay-title " id="feedback-dialog-title"> Provide feedback </h1> </div> <div class="Overlay-actionWrap"> <button data-close-dialog-id="feedback-dialog" aria-label="Close" type="button" data-view-component="true" class="close-button Overlay-closeButton"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg></button> </div> </div> </div> <scrollable-region data-labelled-by="feedback-dialog-title"> <div data-view-component="true" class="Overlay-body"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="code-search-feedback-form" data-turbo="false" action="/search/feedback" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="euZTj3stWSbyqndtZBFrTmQK1hgL73ScECocqZS5nT3Jrck8u8Npssy7cLIv1fw685bJbPoINLb0+XX7dBXu/A==" /> <p>We read every piece of feedback, and take your input very seriously.</p> <textarea name="feedback" class="form-control width-full mb-2" style="height: 120px" id="feedback"></textarea> <input name="include_email" id="include_email" aria-label="Include my email address so I can be contacted" class="form-control mr-2" type="checkbox"> <label for="include_email" style="font-weight: normal">Include my email address so I can be contacted</label> </form></div> </scrollable-region> <div data-view-component="true" class="Overlay-footer Overlay-footer--alignEnd"> <button data-close-dialog-id="feedback-dialog" type="button" data-view-component="true" class="btn"> Cancel </button> <button form="code-search-feedback-form" data-action="click:qbsearch-input#submitFeedback" type="submit" data-view-component="true" class="btn-primary btn"> Submit feedback </button> </div> </dialog></dialog-helper> <custom-scopes data-target="qbsearch-input.customScopesManager"> <dialog-helper> <dialog data-target="custom-scopes.customScopesModalDialog" data-action="close:qbsearch-input#handleDialogClose cancel:qbsearch-input#handleDialogClose" id="custom-scopes-dialog" aria-modal="true" aria-labelledby="custom-scopes-dialog-title" aria-describedby="custom-scopes-dialog-description" data-view-component="true" class="Overlay Overlay-whenNarrow Overlay--size-medium Overlay--motion-scaleFade Overlay--disableScroll"> <div data-view-component="true" class="Overlay-header Overlay-header--divided"> <div class="Overlay-headerContentWrap"> <div class="Overlay-titleWrap"> <h1 class="Overlay-title " id="custom-scopes-dialog-title"> Saved searches </h1> <h2 id="custom-scopes-dialog-description" class="Overlay-description">Use saved searches to filter your results more quickly</h2> </div> <div class="Overlay-actionWrap"> <button data-close-dialog-id="custom-scopes-dialog" aria-label="Close" type="button" data-view-component="true" class="close-button Overlay-closeButton"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg></button> </div> </div> </div> <scrollable-region data-labelled-by="custom-scopes-dialog-title"> <div data-view-component="true" class="Overlay-body"> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <div hidden class="create-custom-scope-form" data-target="custom-scopes.createCustomScopeForm"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="custom-scopes-dialog-form" data-turbo="false" action="/search/custom_scopes" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="txRRcMnQgoJ4JQMYEj+ZideJl/5lajztEri52XSErZALTbJmx7yV8TIzZ3oFI1Dzzdkkr/BvFTY3wiOtv8La3w==" /> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <input type="hidden" id="custom_scope_id" name="custom_scope_id" data-target="custom-scopes.customScopesIdField"> <div class="form-group"> <label for="custom_scope_name">Name</label> <auto-check src="/search/custom_scopes/check_name" required only-validate-on-blur="false"> <input type="text" name="custom_scope_name" id="custom_scope_name" data-target="custom-scopes.customScopesNameField" class="form-control" autocomplete="off" placeholder="github-ruby" required maxlength="50"> <input type="hidden" data-csrf="true" value="xTu7LVL9n7PZcCbVp2emYTClU0ubhEFIIb/H4Gjjfm2aul9frg/8zgU17e1Hlk8CVgv8jAnrvtOI6v/jjlLAiQ==" /> </auto-check> </div> <div class="form-group"> <label for="custom_scope_query">Query</label> <input type="text" name="custom_scope_query" id="custom_scope_query" data-target="custom-scopes.customScopesQueryField" class="form-control" autocomplete="off" placeholder="(repo:mona/a OR repo:mona/b) AND lang:python" required maxlength="500"> </div> <p class="text-small color-fg-muted"> To see all available qualifiers, see our <a class="Link--inTextBlock" href="https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax">documentation</a>. </p> </form> </div> <div data-target="custom-scopes.manageCustomScopesForm"> <div data-target="custom-scopes.list"></div> </div> </div> </scrollable-region> <div data-view-component="true" class="Overlay-footer Overlay-footer--alignEnd Overlay-footer--divided"> <button data-action="click:custom-scopes#customScopesCancel" type="button" data-view-component="true" class="btn"> Cancel </button> <button form="custom-scopes-dialog-form" data-action="click:custom-scopes#customScopesSubmit" data-target="custom-scopes.customScopesSubmitButton" type="submit" data-view-component="true" class="btn-primary btn"> Create saved search </button> </div> </dialog></dialog-helper> </custom-scopes> </div> </qbsearch-input> <div class="position-relative HeaderMenu-link-wrap d-lg-inline-block"> <a href="/login?return_to=https%3A%2F%2Fgithub.com%2Fnietras%2FSep" class="HeaderMenu-link HeaderMenu-link--sign-in HeaderMenu-button flex-shrink-0 no-underline d-none d-lg-inline-flex border border-lg-0 rounded rounded-lg-0 px-2 py-1" style="margin-left: 12px;" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/nietras/Sep&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="80ac9d588f15dd4faf8b95eba66341e12c6a61028de1da4f8072075ab12006ce" data-analytics-event="{&quot;category&quot;:&quot;Marketing nav&quot;,&quot;action&quot;:&quot;click to go to homepage&quot;,&quot;label&quot;:&quot;ref_page:Marketing;ref_cta:Sign in;ref_loc:Header&quot;}" > Sign in </a> </div> <a href="/signup?ref_cta=Sign+up&amp;ref_loc=header+logged+out&amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E&amp;source=header-repo&amp;source_repo=nietras%2FSep" class="HeaderMenu-link HeaderMenu-link--sign-up HeaderMenu-button flex-shrink-0 d-flex d-lg-inline-flex no-underline border color-border-default rounded px-2 py-1" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/nietras/Sep&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="80ac9d588f15dd4faf8b95eba66341e12c6a61028de1da4f8072075ab12006ce" data-analytics-event="{&quot;category&quot;:&quot;Sign up&quot;,&quot;action&quot;:&quot;click to sign up for account&quot;,&quot;label&quot;:&quot;ref_page:/&lt;user-name&gt;/&lt;repo-name&gt;;ref_cta:Sign up;ref_loc:header logged out&quot;}" > Sign up </a> <button type="button" class="sr-only js-header-menu-focus-trap d-block d-lg-none">Reseting focus</button> </div> </div> </div> </div> </header> <div hidden="hidden" data-view-component="true" class="js-stale-session-flash stale-session-flash flash flash-warn flash-full"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <button id="icon-button-a0cf0c30-208b-4691-9e56-9e7ba9080798" aria-labelledby="tooltip-9e8f707d-2248-402a-9fc9-b45ab9c142fb" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button><tool-tip id="tooltip-9e8f707d-2248-402a-9fc9-b45ab9c142fb" for="icon-button-a0cf0c30-208b-4691-9e56-9e7ba9080798" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip> </div> </div> <div id="start-of-content" class="show-on-focus"></div> <div id="js-flash-container" class="flash-container" data-turbo-replace> <template class="js-flash-template"> <div class="flash flash-full {{ className }}"> <div > <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> <div aria-atomic="true" role="alert" class="js-flash-alert"> <div>{{ message }}</div> </div> </div> </div> </template> </div> <div class="application-main " data-commit-hovercards-enabled data-discussion-hovercards-enabled data-issue-and-pr-hovercards-enabled data-project-hovercards-enabled > <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class=""> <main id="js-repo-pjax-container" > <div id="repository-container-header" class="pt-3 hide-full-screen" style="background-color: var(--page-header-bgColor, var(--color-page-header-bg));" data-turbo-replace> <div class="d-flex flex-nowrap flex-justify-end mb-3 px-3 px-lg-5" style="gap: 1rem;"> <div class="flex-auto min-width-0 width-fit"> <div class=" d-flex flex-wrap flex-items-center wb-break-word f3 text-normal"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo color-fg-muted mr-2"> <path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.495 2.495 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.486 2.486 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z"></path> </svg> <span class="author flex-self-stretch" itemprop="author"> <a class="url fn" rel="author" data-hovercard-type="user" data-hovercard-url="/users/nietras/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/nietras"> nietras </a> </span> <span class="mx-1 flex-self-stretch color-fg-muted">/</span> <strong itemprop="name" class="mr-2 flex-self-stretch"> <a data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/nietras/Sep">Sep</a> </strong> <span></span><span class="Label Label--secondary v-align-middle mr-1">Public</span> </div> </div> <div id="repository-details-container" class="flex-shrink-0" data-turbo-replace style="max-width: 70%;"> <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;"> <li> <a href="/login?return_to=%2Fnietras%2FSep" rel="nofollow" id="repository-details-watch-button" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;notification subscription menu watch&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/nietras/Sep&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="3f82f329f95c9d06dba619ae806d91e51543429cdc73987196605361376ac36c" aria-label="You must be signed in to change notification settings" data-view-component="true" class="btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell mr-2"> <path d="M8 16a2 2 0 0 0 1.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 0 0 8 16ZM3 5a5 5 0 0 1 10 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.519 1.519 0 0 1 13.482 13H2.518a1.516 1.516 0 0 1-1.263-2.36l1.703-2.554A.255.255 0 0 0 3 7.947Zm5-3.5A3.5 3.5 0 0 0 4.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.017.017 0 0 0-.003.01l.001.006c0 .002.002.004.004.006l.006.004.007.001h10.964l.007-.001.006-.004.004-.006.001-.007a.017.017 0 0 0-.003-.01l-1.703-2.554a1.745 1.745 0 0 1-.294-.97V5A3.5 3.5 0 0 0 8 1.5Z"></path> </svg>Notifications </a> <tool-tip id="tooltip-7a820caf-717e-4410-ac6f-fdce2f64c425" for="repository-details-watch-button" popover="manual" data-direction="s" data-type="description" data-view-component="true" class="sr-only position-absolute">You must be signed in to change notification settings</tool-tip> </li> <li> <a icon="repo-forked" id="fork-button" href="/login?return_to=%2Fnietras%2FSep" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;repo details fork button&quot;,&quot;repository_id&quot;:602555092,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/nietras/Sep&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="794f3615e28a973d1306a79fa64f9c137cd70090b34406f9802c81b79c64d0aa" data-view-component="true" class="btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg>Fork <span id="repo-network-counter" data-pjax-replace="true" data-turbo-replace="true" title="42" data-view-component="true" class="Counter">42</span> </a> </li> <li> <div data-view-component="true" class="BtnGroup d-flex"> <a href="/login?return_to=%2Fnietras%2FSep" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;star button&quot;,&quot;repository_id&quot;:602555092,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/nietras/Sep&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="5feb370441fe1d0093f31f42dfe4ae602f7b2a5327e1d973c2be388d2d923d04" aria-label="You must be signed in to star a repository" data-view-component="true" class="tooltipped tooltipped-sw btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star v-align-text-bottom d-inline-block mr-2"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg><span data-view-component="true" class="d-inline"> Star </span> <span id="repo-stars-counter-star" aria-label="1082 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="1,082" data-view-component="true" class="Counter js-social-count">1.1k</span> </a></div> </li> </ul> </div> </div> <div id="responsive-meta-container" data-turbo-replace> <div class="d-block d-md-none mb-2 px-3 px-md-4 px-lg-5"> <p class="f4 mb-3 "> World's Fastest .NET CSV Parser. Modern, minimal, fast, zero allocation, reading and writing of separated values (`csv`, `tsv` etc.). Cross-platform, trimmable and AOT/NativeAOT compatible. </p> <div class="mb-2 d-flex flex-items-center Link--secondary"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link flex-shrink-0 mr-2"> <path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path> </svg> <span class="flex-auto min-width-0 css-truncate css-truncate-target width-fit"> <a title="http://nietras.com" role="link" target="_blank" class="text-bold" rel="noopener noreferrer" href="http://nietras.com">nietras.com</a> </span> </div> <h3 class="sr-only">License</h3> <div class="mb-2"> <a href="/nietras/Sep/blob/main/LICENSE" class="Link--muted" data-analytics-event="{&quot;category&quot;:&quot;Repository Overview&quot;,&quot;action&quot;:&quot;click&quot;,&quot;label&quot;:&quot;location:sidebar;file:license&quot;}" > <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-law mr-2"> <path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"></path> </svg> MIT license </a> </div> <div class="mb-3"> <a class="Link--secondary no-underline mr-3" href="/nietras/Sep/stargazers"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star mr-1"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg> <span class="text-bold">1.1k</span> stars </a> <a class="Link--secondary no-underline mr-3" href="/nietras/Sep/forks"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-1"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg> <span class="text-bold">42</span> forks </a> <a class="Link--secondary no-underline mr-3 d-inline-block" href="/nietras/Sep/branches"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-branch mr-1"> <path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path> </svg> <span>Branches</span> </a> <a class="Link--secondary no-underline d-inline-block" href="/nietras/Sep/tags"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-tag mr-1"> <path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"></path> </svg> <span>Tags</span> </a> <a class="Link--secondary no-underline d-inline-block" href="/nietras/Sep/activity"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pulse mr-1"> <path d="M6 2c.306 0 .582.187.696.471L10 10.731l1.304-3.26A.751.751 0 0 1 12 7h3.25a.75.75 0 0 1 0 1.5h-2.742l-1.812 4.528a.751.751 0 0 1-1.392 0L6 4.77 4.696 8.03A.75.75 0 0 1 4 8.5H.75a.75.75 0 0 1 0-1.5h2.742l1.812-4.529A.751.751 0 0 1 6 2Z"></path> </svg> <span>Activity</span> </a> </div> <div class="d-flex flex-wrap gap-2"> <div class="flex-1"> <div data-view-component="true" class="BtnGroup d-flex"> <a href="/login?return_to=%2Fnietras%2FSep" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;star button&quot;,&quot;repository_id&quot;:602555092,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/nietras/Sep&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="5feb370441fe1d0093f31f42dfe4ae602f7b2a5327e1d973c2be388d2d923d04" aria-label="You must be signed in to star a repository" data-view-component="true" class="tooltipped tooltipped-sw btn-sm btn btn-block"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star v-align-text-bottom d-inline-block mr-2"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg><span data-view-component="true" class="d-inline"> Star </span> </a></div> </div> <div class="flex-1"> <a href="/login?return_to=%2Fnietras%2FSep" rel="nofollow" id="files-overview-watch-button" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;notification subscription menu watch&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/nietras/Sep&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="3f82f329f95c9d06dba619ae806d91e51543429cdc73987196605361376ac36c" aria-label="You must be signed in to change notification settings" data-view-component="true" class="btn-sm btn btn-block"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell mr-2"> <path d="M8 16a2 2 0 0 0 1.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 0 0 8 16ZM3 5a5 5 0 0 1 10 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.519 1.519 0 0 1 13.482 13H2.518a1.516 1.516 0 0 1-1.263-2.36l1.703-2.554A.255.255 0 0 0 3 7.947Zm5-3.5A3.5 3.5 0 0 0 4.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.017.017 0 0 0-.003.01l.001.006c0 .002.002.004.004.006l.006.004.007.001h10.964l.007-.001.006-.004.004-.006.001-.007a.017.017 0 0 0-.003-.01l-1.703-2.554a1.745 1.745 0 0 1-.294-.97V5A3.5 3.5 0 0 0 8 1.5Z"></path> </svg>Notifications </a> <tool-tip id="tooltip-c4c6ff56-e825-4356-a0a1-caf49abc6c9d" for="files-overview-watch-button" popover="manual" data-direction="s" data-type="description" data-view-component="true" class="sr-only position-absolute">You must be signed in to change notification settings</tool-tip> </div> <span> </span> </div> </div> </div> <nav data-pjax="#js-repo-pjax-container" aria-label="Repository" data-view-component="true" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 px-md-4 px-lg-5"> <ul data-view-component="true" class="UnderlineNav-body list-style-none"> <li data-view-component="true" class="d-inline-flex"> <a id="code-tab" href="/nietras/Sep" data-tab-item="i0code-tab" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments repo_attestations /nietras/Sep" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g c" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Code&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" aria-current="page" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item selected"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code UnderlineNav-octicon d-none d-sm-inline"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> <span data-content="Code">Code</span> <span id="code-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="issues-tab" href="/nietras/Sep/issues" data-tab-item="i1issues-tab" data-selected-links="repo_issues repo_labels repo_milestones /nietras/Sep/issues" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g i" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Issues&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened UnderlineNav-octicon d-none d-sm-inline"> <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path> </svg> <span data-content="Issues">Issues</span> <span id="issues-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="pull-requests-tab" href="/nietras/Sep/pulls" data-tab-item="i2pull-requests-tab" data-selected-links="repo_pulls checks /nietras/Sep/pulls" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g p" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Pull requests&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline"> <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path> </svg> <span data-content="Pull requests">Pull requests</span> <span id="pull-requests-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="9" data-view-component="true" class="Counter">9</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="actions-tab" href="/nietras/Sep/actions" data-tab-item="i3actions-tab" data-selected-links="repo_actions /nietras/Sep/actions" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g a" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Actions&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play UnderlineNav-octicon d-none d-sm-inline"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> <span data-content="Actions">Actions</span> <span id="actions-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="projects-tab" href="/nietras/Sep/projects" data-tab-item="i4projects-tab" data-selected-links="repo_projects new_repo_project repo_project /nietras/Sep/projects" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g b" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Projects&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table UnderlineNav-octicon d-none d-sm-inline"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path> </svg> <span data-content="Projects">Projects</span> <span id="projects-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="security-tab" href="/nietras/Sep/security" data-tab-item="i5security-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /nietras/Sep/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Security&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline"> <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span data-content="Security">Security</span> <include-fragment src="/nietras/Sep/security/overall-count" accept="text/fragment+html"></include-fragment> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="insights-tab" href="/nietras/Sep/pulse" data-tab-item="i6insights-tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /nietras/Sep/pulse" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Insights&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline"> <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> <span data-content="Insights">Insights</span> <span id="insights-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> </ul> <div style="visibility:hidden;" data-view-component="true" class="UnderlineNav-actions js-responsive-underlinenav-overflow position-absolute pr-3 pr-md-4 pr-lg-5 right-0"> <action-menu data-select-variant="none" data-view-component="true"> <focus-group direction="vertical" mnemonics retain> <button id="action-menu-4e34ed62-bbe8-4709-9604-f4216c370b06-button" popovertarget="action-menu-4e34ed62-bbe8-4709-9604-f4216c370b06-overlay" aria-controls="action-menu-4e34ed62-bbe8-4709-9604-f4216c370b06-list" aria-haspopup="true" aria-labelledby="tooltip-5f9acc68-0a1e-4ece-a753-3dfd6fdfe970" type="button" data-view-component="true" class="Button Button--iconOnly Button--secondary Button--medium UnderlineNav-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal Button-visual"> <path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path> </svg> </button><tool-tip id="tooltip-5f9acc68-0a1e-4ece-a753-3dfd6fdfe970" for="action-menu-4e34ed62-bbe8-4709-9604-f4216c370b06-button" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Additional navigation options</tool-tip> <anchored-position data-target="action-menu.overlay" id="action-menu-4e34ed62-bbe8-4709-9604-f4216c370b06-overlay" anchor="action-menu-4e34ed62-bbe8-4709-9604-f4216c370b06-button" align="start" side="outside-bottom" anchor-offset="normal" popover="auto" data-view-component="true"> <div data-view-component="true" class="Overlay Overlay--size-auto"> <div data-view-component="true" class="Overlay-body Overlay-body--paddingNone"> <action-list> <div data-view-component="true"> <ul aria-labelledby="action-menu-4e34ed62-bbe8-4709-9604-f4216c370b06-button" id="action-menu-4e34ed62-bbe8-4709-9604-f4216c370b06-list" role="menu" data-view-component="true" class="ActionListWrap--inset ActionListWrap"> <li hidden="hidden" data-menu-item="i0code-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-96139938-48df-417b-9fe8-b54369e36364" href="/nietras/Sep" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Code </span> </a> </li> <li hidden="hidden" data-menu-item="i1issues-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-18d2b06d-a6e5-4e88-8ed3-b1b01cb6645b" href="/nietras/Sep/issues" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened"> <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Issues </span> </a> </li> <li hidden="hidden" data-menu-item="i2pull-requests-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-9d5b72b6-966c-4f29-9530-3bbc2c1ed736" href="/nietras/Sep/pulls" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request"> <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Pull requests </span> </a> </li> <li hidden="hidden" data-menu-item="i3actions-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-3aca7fd4-4eb8-4a1e-adc5-2a632160c211" href="/nietras/Sep/actions" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Actions </span> </a> </li> <li hidden="hidden" data-menu-item="i4projects-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-b6662ae6-2952-4f65-b63c-64f72c777333" href="/nietras/Sep/projects" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Projects </span> </a> </li> <li hidden="hidden" data-menu-item="i5security-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-32c2178c-aa12-4784-9aaf-68acf449f209" href="/nietras/Sep/security" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield"> <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Security </span> </a> </li> <li hidden="hidden" data-menu-item="i6insights-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-87fed58d-f648-4473-92e7-e99846a103e0" href="/nietras/Sep/pulse" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph"> <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Insights </span> </a> </li> </ul> </div></action-list> </div> </div></anchored-position> </focus-group> </action-menu></div> </nav> </div> <turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class=""> <div id="repo-content-pjax-container" class="repository-content " > <h1 class='sr-only'>nietras/Sep</h1> <div class="clearfix container-xl px-md-4 px-lg-5 px-3"> <div> <div style="max-width: 100%" data-view-component="true" class="Layout Layout--flowRow-until-md react-repos-overview-margin Layout--sidebarPosition-end Layout--sidebarPosition-flowRow-end"> <div data-view-component="true" class="Layout-main"> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_dompurify_dist_purify_es_mjs-dd1d3ea6a436.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_tanstack_query-core_build_modern_queryObserver_js-node_modules_tanstack_-defd52-843b41414e0e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_aria-live_aria-live_ts-ui_packages_history_history_ts-ui_packages_promise-with-re-01dc80-b13b6c1d97b0.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_paths_index_ts-04e7ec2d63d9.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_ref-selector_RefSelector_tsx-7496afc3784d.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_commit-attribution_index_ts-ui_packages_commit-checks-status_index_ts-ui_packages-762eaa-d78307eadb45.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_code-view-shared_hooks_use-canonical-object_ts-ui_packages_code-view-shared_hooks-c2dbff-fc59bb4d3e8c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/repos-overview-4ec6cc265f7f.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.7110f8bed75b67122d7a.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repos-overview.0ee7cac3ab511a65d9f9.module.css" /> <react-partial partial-name="repos-overview" data-ssr="true" data-attempted-ssr="true" > <script type="application/json" data-target="react-partial.embeddedData">{"props":{"initialPayload":{"allShortcutsEnabled":false,"path":"/","repo":{"id":602555092,"defaultBranch":"main","name":"Sep","ownerLogin":"nietras","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2023-02-16T13:12:25.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/10798831?v=4","public":true,"private":false,"isOrgOwned":false},"currentUser":null,"refInfo":{"name":"main","listCacheKey":"v0:1743542443.0","canEdit":false,"refType":"branch","currentOid":"bb269fe6e61647a24a0179ef3de2b405673220ae"},"tree":{"items":[{"name":".github","path":".github","contentType":"directory"},{"name":"benchmarks","path":"benchmarks","contentType":"directory"},{"name":"src","path":"src","contentType":"directory"},{"name":".editorconfig","path":".editorconfig","contentType":"file"},{"name":".gitattributes","path":".gitattributes","contentType":"file"},{"name":".gitignore","path":".gitignore","contentType":"file"},{"name":".jscpd.json","path":".jscpd.json","contentType":"file"},{"name":".markdownlint.json","path":".markdownlint.json","contentType":"file"},{"name":".pre-commit-config.yaml","path":".pre-commit-config.yaml","contentType":"file"},{"name":"CODE_OF_CONDUCT.md","path":"CODE_OF_CONDUCT.md","contentType":"file"},{"name":"CONTRIBUTING.md","path":"CONTRIBUTING.md","contentType":"file"},{"name":"Icon.png","path":"Icon.png","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"SECURITY.md","path":"SECURITY.md","contentType":"file"},{"name":"Sep.sln","path":"Sep.sln","contentType":"file"},{"name":"bench.ps1","path":"bench.ps1","contentType":"file"},{"name":"codecov.yml","path":"codecov.yml","contentType":"file"},{"name":"comparison-bench.ps1","path":"comparison-bench.ps1","contentType":"file"},{"name":"global.json","path":"global.json","contentType":"file"},{"name":"nuget.config","path":"nuget.config","contentType":"file"},{"name":"pack.ps1","path":"pack.ps1","contentType":"file"},{"name":"publish-tester.ps1","path":"publish-tester.ps1","contentType":"file"},{"name":"rename.ps1","path":"rename.ps1","contentType":"file"},{"name":"test-parsers.ps1","path":"test-parsers.ps1","contentType":"file"},{"name":"test-x64-x86.ps1","path":"test-x64-x86.ps1","contentType":"file"},{"name":"validate-codecov.sh","path":"validate-codecov.sh","contentType":"file"}],"templateDirectorySuggestionUrl":null,"readme":null,"totalCount":27,"showBranchInfobar":false},"fileTree":null,"fileTreeProcessingTime":null,"foldersToFetch":[],"treeExpanded":false,"symbolsExpanded":false,"isOverview":true,"overview":{"banners":{"shouldRecommendReadme":false,"isPersonalRepo":false,"showUseActionBanner":false,"actionSlug":null,"actionId":null,"showProtectBranchBanner":false,"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_repo","releasePath":"/nietras/Sep/releases/new?marketplace=true","showPublishActionBanner":false},"interactionLimitBanner":null,"showInvitationBanner":false,"inviterName":null,"actionsMigrationBannerInfo":{"releaseTags":[],"showImmutableActionsMigrationBanner":false,"initialMigrationStatus":null}},"codeButton":{"contactPath":"/contact","isEnterprise":false,"local":{"protocolInfo":{"httpAvailable":true,"sshAvailable":null,"httpUrl":"https://github.com/nietras/Sep.git","showCloneWarning":null,"sshUrl":null,"sshCertificatesRequired":null,"sshCertificatesAvailable":null,"ghCliUrl":"gh repo clone nietras/Sep","defaultProtocol":"http","newSshKeyUrl":"/settings/ssh/new","setProtocolPath":"/users/set_protocol"},"platformInfo":{"cloneUrl":"https://desktop.github.com","showVisualStudioCloneButton":false,"visualStudioCloneUrl":"https://windows.github.com","showXcodeCloneButton":false,"xcodeCloneUrl":"xcode://clone?repo=https%3A%2F%2Fgithub.com%2Fnietras%2FSep","zipballUrl":"/nietras/Sep/archive/refs/heads/main.zip"}},"newCodespacePath":"/codespaces/new?hide_repo_select=true\u0026repo=602555092"},"popovers":{"rename":null,"renamedParentRepo":null},"commitCount":"227","overviewFiles":[{"displayName":"README.md","repoName":"Sep","refName":"main","path":"README.md","preferredFileType":"readme","tabName":"README","richText":"\u003carticle class=\"markdown-body entry-content container-lg\" itemprop=\"text\"\u003e\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eSep - the World's Fastest .NET CSV Parser\u003c/h1\u003e\u003ca id=\"user-content-sep---the-worlds-fastest-net-csv-parser\" class=\"anchor\" aria-label=\"Permalink: Sep - the World's Fastest .NET CSV Parser\" href=\"#sep---the-worlds-fastest-net-csv-parser\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/b9bb980f0f94155adbf53f97b91559c9422c7ea973f2a27e7117380d5a3b20a0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6e6574382e302532306e6574392e302d3543324439313f6c6f676f3d2e4e4554266c6162656c436f6c6f723d67726179\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/b9bb980f0f94155adbf53f97b91559c9422c7ea973f2a27e7117380d5a3b20a0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6e6574382e302532306e6574392e302d3543324439313f6c6f676f3d2e4e4554266c6162656c436f6c6f723d67726179\" alt=\".NET\" data-canonical-src=\"https://img.shields.io/badge/net8.0%20net9.0-5C2D91?logo=.NET\u0026amp;labelColor=gray\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/11bdf82a13649e109492ed857d8a8a5080b77235a5a1dd1ff5b66f80abfb95c7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f432532332d31332e302d3233393132303f6c6162656c436f6c6f723d67726179\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/11bdf82a13649e109492ed857d8a8a5080b77235a5a1dd1ff5b66f80abfb95c7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f432532332d31332e302d3233393132303f6c6162656c436f6c6f723d67726179\" alt=\"C#\" data-canonical-src=\"https://img.shields.io/badge/C%23-13.0-239120?labelColor=gray\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/nietras/Sep/actions/workflows/dotnet.yml\"\u003e\u003cimg src=\"https://github.com/nietras/Sep/actions/workflows/dotnet.yml/badge.svg?branch=main\" alt=\"Build Status\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/marketplace/actions/super-linter\"\u003e\u003cimg src=\"https://github.com/nietras/Sep/actions/workflows/super-linter.yml/badge.svg\" alt=\"Super-Linter\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n\u003ca href=\"https://codecov.io/gh/nietras/Sep\" rel=\"nofollow\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/511865052016cf1cd5734089813acee121a0561ed562e172497cb62694ca2dd4/68747470733a2f2f636f6465636f762e696f2f67682f6e6965747261732f5365702f6272616e63682f6d61696e2f67726170682f62616467652e7376673f746f6b656e3d574e3536435233583044\" alt=\"codecov\" data-canonical-src=\"https://codecov.io/gh/nietras/Sep/branch/main/graph/badge.svg?token=WN56CR3X0D\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/nietras/Sep/actions?query=workflow%3ACodeQL\"\u003e\u003cimg src=\"https://github.com/nietras/Sep/workflows/CodeQL/badge.svg\" alt=\"CodeQL\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n\u003ca href=\"https://www.nuget.org/packages/Sep/\" rel=\"nofollow\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/0fa9f92f5efc32cafdf5537993a636f935daedfa3f50bcea095bc7d05c6da919/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f5365703f636f6c6f723d707572706c65\" alt=\"Nuget\" data-canonical-src=\"https://img.shields.io/nuget/v/Sep?color=purple\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/nietras/Sep/releases/\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/42e96689ad81023e00d5785d3cae1226a3fd21e504a5e49212ce93de83859f5b/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f6e6965747261732f536570\" alt=\"Release\" data-canonical-src=\"https://img.shields.io/github/v/release/nietras/Sep\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n\u003ca href=\"https://www.nuget.org/packages/Sep\" rel=\"nofollow\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/ae90499217ad728b4d4cc5b85365a55ae52deb548046a8f1ef0aea0e8c564518/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f536570\" alt=\"downloads\" data-canonical-src=\"https://img.shields.io/nuget/dt/Sep\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/e269203002bd905e1eb1902866d3dda20435e30912293be1e892df40f1e0b1b9/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7265706f2d73697a652f6e6965747261732f5365702e737667\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/e269203002bd905e1eb1902866d3dda20435e30912293be1e892df40f1e0b1b9/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7265706f2d73697a652f6e6965747261732f5365702e737667\" alt=\"Size\" data-canonical-src=\"https://img.shields.io/github/repo-size/nietras/Sep.svg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/nietras/Sep/blob/main/LICENSE\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/11c4bea1a9da5efad7a78207e107da1ec6a3789533e92c80e191928ba817d3e8/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6e6965747261732f536570\" alt=\"License\" data-canonical-src=\"https://img.shields.io/github/license/nietras/Sep\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n\u003ca href=\"https://nietras.com\" rel=\"nofollow\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/ba07f9fc9b78b3221b2ffc2d676100a23b16f3a220334dbf5c6a3b6c82da49c4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f626c6f672d6e6965747261732e636f6d2d343939334444\" alt=\"Blog\" data-canonical-src=\"https://img.shields.io/badge/blog-nietras.com-4993DD\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/acae648b5b90e273b1ba8e653e9795f2f55b71a2cb6e5f569a89298ce10e3539/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f6e6965747261732f5365703f7374796c653d666c6174\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/acae648b5b90e273b1ba8e653e9795f2f55b71a2cb6e5f569a89298ce10e3539/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f6e6965747261732f5365703f7374796c653d666c6174\" alt=\"GitHub Repo stars\" data-canonical-src=\"https://img.shields.io/github/stars/nietras/Sep?style=flat\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eModern, minimal, fast, zero allocation, reading and writing of separated values\n(\u003ccode\u003ecsv\u003c/code\u003e, \u003ccode\u003etsv\u003c/code\u003e etc.). Cross-platform, trimmable and AOT/NativeAOT compatible.\nFeaturing an opinionated API design and pragmatic implementation targetted at\nmachine learning use cases.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e⭐ Please star this project if you like it. ⭐\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e🌃 Modern\u003c/strong\u003e - utilizes features such as\n\u003ca href=\"https://learn.microsoft.com/en-us/archive/msdn-magazine/2018/january/csharp-all-about-span-exploring-a-new-net-mainstay\" rel=\"nofollow\"\u003e\u003ccode\u003eSpan\u0026lt;T\u0026gt;\u003c/code\u003e\u003c/a\u003e,\n\u003ca href=\"https://devblogs.microsoft.com/dotnet/dotnet-7-generic-math/\" rel=\"nofollow\"\u003eGeneric Math\u003c/a\u003e\n(\u003ca href=\"https://learn.microsoft.com/en-us/dotnet/api/system.ispanparsable-1\" rel=\"nofollow\"\u003e\u003ccode\u003eISpanParsable\u0026lt;T\u0026gt;\u003c/code\u003e\u003c/a\u003e/\n\u003ca href=\"https://learn.microsoft.com/en-us/dotnet/api/system.ispanformattable\" rel=\"nofollow\"\u003e\u003ccode\u003eISpanFormattable\u003c/code\u003e\u003c/a\u003e),\n\u003ca href=\"https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/ref-struct\" rel=\"nofollow\"\u003e\u003ccode\u003eref struct\u003c/code\u003e\u003c/a\u003e,\n\u003ca href=\"https://learn.microsoft.com/en-us/dotnet/api/system.buffers.arraypool-1\" rel=\"nofollow\"\u003e\u003ccode\u003eArrayPool\u0026lt;T\u0026gt;\u003c/code\u003e\u003c/a\u003e\nand similar from \u003ca href=\"https://nietras.com/2022/11/26/dotnet-and-csharp-versions/\" rel=\"nofollow\"\u003e.NET 7+ and C#\n11+\u003c/a\u003e for a modern\nand highly efficient implementation.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e🔎 Minimal\u003c/strong\u003e - a succinct yet expressive API with few options and no hidden\nchanges to input or output. What you read/write is what you get. E.g. by default\nthere is no \"automatic\" escaping/unescaping of quotes or trimming of spaces. To\nenable this see \u003ca href=\"#sepreaderoptions\"\u003eSepReaderOptions\u003c/a\u003e and\n\u003ca href=\"#unescaping\"\u003eUnescaping\u003c/a\u003e and \u003ca href=\"#trimming\"\u003eTrimming\u003c/a\u003e. See\n\u003ca href=\"#sepwriteroptions\"\u003eSepWriterOptions\u003c/a\u003e for \u003ca href=\"#escaping\"\u003eEscaping\u003c/a\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e🚀 Fast\u003c/strong\u003e - blazing fast with both architecture specific and cross-platform\nSIMD vectorized parsing incl. 64/128/256/512-bit paths e.g. AVX2, AVX-512 (.NET\n8.0+), NEON. Uses \u003ca href=\"https://github.com/CarlVerret/csFastFloat\"\u003ecsFastFloat\u003c/a\u003e for\nfast parsing of floating points. See \u003ca href=\"#comparison-benchmarks\"\u003edetailed\nbenchmarks\u003c/a\u003e for cross-platform results.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e🌪️ Multi-threaded\u003c/strong\u003e - unparalleled speed with highly efficient parallel CSV\nparsing that is \u003ca href=\"#floats-reader-comparison-benchmarks\"\u003eup to 35x faster than\nCsvHelper\u003c/a\u003e, see\n\u003ca href=\"#parallelenumerate-and-enumerate\"\u003eParallelEnumerate\u003c/a\u003e and\n\u003ca href=\"#comparison-benchmarks\"\u003ebenchmarks\u003c/a\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e🌀 Async support\u003c/strong\u003e - efficient \u003ccode\u003eValueTask\u003c/code\u003e based \u003ccode\u003easync/await\u003c/code\u003e support.\nRequires C# 13.0+ and for .NET 9.0+ includes \u003ccode\u003eSepReader\u003c/code\u003e implementing\n\u003ccode\u003eIAsyncEnumerable\u0026lt;\u0026gt;\u003c/code\u003e. See \u003ca href=\"#async-support\"\u003eAsync Support\u003c/a\u003e for details.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e🗑️ Zero allocation\u003c/strong\u003e - intelligent and efficient memory management allowing\nfor zero allocations after warmup incl. supporting use cases of reading or\nwriting arrays of values (e.g. features) easily without repeated allocations.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e✅ Thorough tests\u003c/strong\u003e - great code coverage and focus on edge case testing incl.\nrandomized \u003ca href=\"https://en.wikipedia.org/wiki/Fuzzing\" rel=\"nofollow\"\u003efuzz testing\u003c/a\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e🌐 Cross-platform\u003c/strong\u003e - works on any platform, any architecture supported by\nNET. 100% managed and written in beautiful modern C#.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e✂️ Trimmable and AOT/NativeAOT compatible\u003c/strong\u003e - no problematic reflection or\ndynamic code generation. Hence, fully\n\u003ca href=\"https://learn.microsoft.com/en-us/dotnet/core/deploying/trimming/prepare-libraries-for-trimming\" rel=\"nofollow\"\u003etrimmable\u003c/a\u003e\nand\n\u003ca href=\"https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/\" rel=\"nofollow\"\u003eAhead-of-Time\u003c/a\u003e\ncompatible. With a simple console tester program executable possible in just a\nfew MBs. 💾\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e🗣️ Opinionated and pragmatic\u003c/strong\u003e - conforms to the essentials of\n\u003ca href=\"https://www.ietf.org/rfc/rfc4180.txt\" rel=\"nofollow\"\u003eRFC-4180\u003c/a\u003e, but takes an opinionated and\npragmatic approach towards this especially with regards to quoting and line\nends. See section \u003ca href=\"#rfc-4180\"\u003eRFC-4180\u003c/a\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"#example\"\u003eExample\u003c/a\u003e | \u003ca href=\"#naming-and-terminology\"\u003eNaming and Terminology\u003c/a\u003e | \u003ca href=\"#application-programming-interface-api\"\u003eAPI\u003c/a\u003e | \u003ca href=\"#limitations-and-constraints\"\u003eLimitations and Constraints\u003c/a\u003e | \u003ca href=\"#comparison-benchmarks\"\u003eComparison Benchmarks\u003c/a\u003e | \u003ca href=\"#example-catalogue\"\u003eExample Catalogue\u003c/a\u003e | \u003ca href=\"#rfc-4180\"\u003eRFC-4180\u003c/a\u003e | \u003ca href=\"#frequently-asked-questions-faq\"\u003eFAQ\u003c/a\u003e | \u003ca href=\"#public-api-reference\"\u003ePublic API Reference\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eExample\u003c/h2\u003e\u003ca id=\"user-content-example\" class=\"anchor\" aria-label=\"Permalink: Example\" href=\"#example\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var text = \u0026quot;\u0026quot;\u0026quot;\n A;B;C;D;E;F\n Sep;🚀;1;1.2;0.1;0.5\n CSV;✅;2;2.2;0.2;1.5\n \u0026quot;\u0026quot;\u0026quot;;\n\nusing var reader = Sep.Reader().FromText(text); // Infers separator 'Sep' from header\nusing var writer = reader.Spec.Writer().ToText(); // Writer defined from reader 'Spec'\n // Use .FromFile(...)/ToFile(...) for files\nvar idx = reader.Header.IndexOf(\u0026quot;B\u0026quot;);\nvar nms = new[] { \u0026quot;E\u0026quot;, \u0026quot;F\u0026quot; };\n\nforeach (var readRow in reader) // Read one row at a time\n{\n var a = readRow[\u0026quot;A\u0026quot;].Span; // Column as ReadOnlySpan\u0026lt;char\u0026gt;\n var b = readRow[idx].ToString(); // Column to string (might be pooled)\n var c = readRow[\u0026quot;C\u0026quot;].Parse\u0026lt;int\u0026gt;(); // Parse any T : ISpanParsable\u0026lt;T\u0026gt;\n var d = readRow[\u0026quot;D\u0026quot;].Parse\u0026lt;float\u0026gt;(); // Parse float/double fast via csFastFloat\n var s = readRow[nms].Parse\u0026lt;double\u0026gt;(); // Parse multiple columns as Span\u0026lt;T\u0026gt;\n // - Sep handles array allocation and reuse\n foreach (ref var v in s) { v *= 10; }\n\n using var writeRow = writer.NewRow(); // Start new row. Row written on Dispose.\n writeRow[\u0026quot;A\u0026quot;].Set(a); // Set by ReadOnlySpan\u0026lt;char\u0026gt;\n writeRow[\u0026quot;B\u0026quot;].Set(b); // Set by string\n writeRow[\u0026quot;C\u0026quot;].Set($\u0026quot;{c * 2}\u0026quot;); // Set via InterpolatedStringHandler, no allocs\n writeRow[\u0026quot;D\u0026quot;].Format(d / 2); // Format any T : ISpanFormattable\n writeRow[nms].Format(s); // Format multiple columns directly\n // Columns are added on first access as ordered, header written when first row written\n}\n\nvar expected = \u0026quot;\u0026quot;\u0026quot;\n A;B;C;D;E;F\n Sep;🚀;2;0.6;1;5\n CSV;✅;4;1.1;2;15\n \n \u0026quot;\u0026quot;\u0026quot;; // Empty line at end is for line ending,\n // which is always written.\nAssert.AreEqual(expected, writer.ToString());\n\n// Above example code is for demonstration purposes only.\n// Short names and repeated constants are only for demonstration.\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e A;B;C;D;E;F\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Sep;🚀;1;1.2;0.1;0.5\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e CSV;✅;2;2.2;0.2;1.5\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// Infers separator 'Sep' from header\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriter\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSpec\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// Writer defined from reader 'Spec'\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e// Use .FromFile(...)/ToFile(...) for files\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eidx\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eHeader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eIndexOf\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"B\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enms\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"E\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"F\"\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereadRow\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// Read one row at a time\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereadRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"A\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSpan\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// Column as ReadOnlySpan\u0026lt;char\u0026gt;\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eb\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereadRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eidx\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// Column to string (might be pooled)\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ec\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereadRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"C\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eParse\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// Parse any T : ISpanParsable\u0026lt;T\u0026gt;\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ed\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereadRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"D\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eParse\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003efloat\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// Parse float/double fast via csFastFloat\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereadRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enms\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eParse\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003edouble\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// Parse multiple columns as Span\u0026lt;T\u0026gt;\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e// - Sep handles array allocation and reuse\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003eref\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ev\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ev\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e*=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n \u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriteRow\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eNewRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// Start new row. Row written on Dispose.\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003ewriteRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"A\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eSet\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// Set by ReadOnlySpan\u0026lt;char\u0026gt;\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003ewriteRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"B\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eSet\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eb\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// Set by string\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003ewriteRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"C\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eSet\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-s\"\u003e$\u003c/span\u003e\"\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ec\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// Set via InterpolatedStringHandler, no allocs\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003ewriteRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"D\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFormat\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ed\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e/\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// Format any T : ISpanFormattable\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003ewriteRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enms\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFormat\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// Format multiple columns directly\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e// Columns are added on first access as ordered, header written when first row written\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eexpected\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e A;B;C;D;E;F\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Sep;🚀;2;0.6;1;5\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e CSV;✅;4;1.1;2;15\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// Empty line at end is for line ending,\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e// which is always written.\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAreEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eexpected\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e// Above example code is for demonstration purposes only.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e// Short names and repeated constants are only for demonstration.\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eNaming and Terminology\u003c/h2\u003e\u003ca id=\"user-content-naming-and-terminology\" class=\"anchor\" aria-label=\"Permalink: Naming and Terminology\" href=\"#naming-and-terminology\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eSep uses naming and terminology that is not based on \u003ca href=\"#rfc-4180\"\u003eRFC-4180\u003c/a\u003e, but\nis more tailored to usage in machine learning or similar. Additionally, Sep\ntakes a pragmatic approach towards names by using short names and abbreviations\nwhere it makes sense and there should be no ambiguity given the context. That\nis, using \u003ccode\u003eSep\u003c/code\u003e for \u003ccode\u003eSeparator\u003c/code\u003e and \u003ccode\u003eCol\u003c/code\u003e for \u003ccode\u003eColumn\u003c/code\u003e to keep code succinct.\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eTerm\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eSep\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eShort for separator, also called \u003cem\u003edelimiter\u003c/em\u003e. E.g. comma (\u003ccode\u003e,\u003c/code\u003e) is the separator for the separated values in a \u003ccode\u003ecsv\u003c/code\u003e-file.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eHeader\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOptional first row defining names of columns.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eRow\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eA row is a collection of col(umn)s, which may span multiple lines. Also called \u003cem\u003erecord\u003c/em\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eCol\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eShort for column, also called \u003cem\u003efield\u003c/em\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eLine\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eHorizontal set of characters until a line ending; \u003ccode\u003e\\r\\n\u003c/code\u003e, \u003ccode\u003e\\r\u003c/code\u003e, \u003ccode\u003e\\n\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eIndex\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e0-based that is \u003ccode\u003eRowIndex\u003c/code\u003e will be 0 for first row (or the header if present).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eNumber\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e1-based that is \u003ccode\u003eLineNumber\u003c/code\u003e will be 1 for the first line (as in \u003ccode\u003enotepad\u003c/code\u003e). Given a row may span multiple lines a row can have a \u003cem\u003eFrom\u003c/em\u003e line number and a \u003cem\u003eToExcl\u003c/em\u003e line number matching the C# range indexing syntax \u003ccode\u003e[LineNumberFrom..LineNumberToExcl]\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eApplication Programming Interface (API)\u003c/h2\u003e\u003ca id=\"user-content-application-programming-interface-api\" class=\"anchor\" aria-label=\"Permalink: Application Programming Interface (API)\" href=\"#application-programming-interface-api\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eBesides being the succinct name of the library, \u003ccode\u003eSep\u003c/code\u003e is both the main entry\npoint to using the library and the container for a validated separator. That is,\n\u003ccode\u003eSep\u003c/code\u003e is basically defined as:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"public readonly record struct Sep(char Separator);\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereadonly\u003c/span\u003e \u003cspan class=\"pl-k\"\u003erecord\u003c/span\u003e \u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003echar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSeparator\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe separator \u003ccode\u003echar\u003c/code\u003e is validated upon construction and is guaranteed to be\nwithin a limited range and not being a \u003ccode\u003echar\u003c/code\u003e like \u003ccode\u003e\"\u003c/code\u003e (quote) or similar. This\ncan be seen in \u003ca href=\"/nietras/Sep/blob/main/src/Sep/Sep.cs\"\u003esrc/Sep/Sep.cs\u003c/a\u003e. The separator is constrained\nalso for internal optimizations, so you cannot use any \u003ccode\u003echar\u003c/code\u003e as a separator.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e⚠ Note that all types are within the namespace \u003ccode\u003enietras.SeparatedValues\u003c/code\u003e and not\n\u003ccode\u003eSep\u003c/code\u003e since it is problematic to have a type and a namespace with the same name.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eTo get started you can use \u003ccode\u003eSep\u003c/code\u003e as the static entry point to building either a\nreader or writer. That is, for \u003ccode\u003eSepReader\u003c/code\u003e:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"using var reader = Sep.Reader().FromFile(\u0026quot;titanic.csv\u0026quot;);\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromFile\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"titanic.csv\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003ewhere \u003ccode\u003e.Reader()\u003c/code\u003e is a convenience method corresponding to:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"using var reader = Sep.Auto.Reader().FromFile(\u0026quot;titanic.csv\u0026quot;);\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eAuto\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromFile\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"titanic.csv\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003ewhere \u003ccode\u003eSep? Auto =\u0026gt; null;\u003c/code\u003e is a static property that returns \u003ccode\u003enull\u003c/code\u003e for a\nnullable \u003ccode\u003eSep\u003c/code\u003e to signify that the separator should be inferred from the first\nrow, which might be a header. If the first row does not contain any of the by\ndefault supported separators or there are no rows, the default separator will be\nused.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e⚠ Note Sep uses \u003ccode\u003e;\u003c/code\u003e as the default separator, since this is what was used in an\ninternal proprietary library which Sep was built to replace. This is also to\navoid issues with comma \u003ccode\u003e,\u003c/code\u003e being used as a decimal separator in some locales.\nWithout having to resort to quoting.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eIf you want to specify the separator you can write:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"using var reader = Sep.New(',').Reader().FromFile(\u0026quot;titanic.csv\u0026quot;);\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eNew\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e','\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromFile\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"titanic.csv\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eor\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var sep = new Sep(',');\nusing var reader = sep.Reader().FromFile(\u0026quot;titanic.csv\u0026quot;);\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esep\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e','\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromFile\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"titanic.csv\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eSimilarly, for \u003ccode\u003eSepWriter\u003c/code\u003e:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"using var writer = Sep.Writer().ToFile(\u0026quot;titanic.csv\u0026quot;);\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriter\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToFile\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"titanic.csv\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eor\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"using var writer = Sep.New(',').Writer().ToFile(\u0026quot;titanic.csv\u0026quot;);\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriter\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eNew\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e','\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToFile\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"titanic.csv\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003ewhere you have to specify a valid separator, since it cannot be inferred. To\nfascillitate easy flow of the separator and \u003ccode\u003eCultureInfo\u003c/code\u003e both \u003ccode\u003eSepReader\u003c/code\u003e and\n\u003ccode\u003eSepWriter\u003c/code\u003e expose a \u003ccode\u003eSpec\u003c/code\u003e property of type \u003ca href=\"/nietras/Sep/blob/main/src/Sep/SepSpec.cs\"\u003e\u003ccode\u003eSepSpec\u003c/code\u003e\u003c/a\u003e that simply defines those\ntwo. This means you can write:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"using var reader = Sep.Reader().FromFile(\u0026quot;titanic.csv\u0026quot;);\nusing var writer = reader.Spec.Writer().ToFile(\u0026quot;titanic-survivors.csv\u0026quot;);\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromFile\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"titanic.csv\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriter\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSpec\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToFile\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"titanic-survivors.csv\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003ewhere the \u003ccode\u003ewriter\u003c/code\u003e then will use the separator inferred by the reader, for\nexample.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAPI Pattern\u003c/h3\u003e\u003ca id=\"user-content-api-pattern\" class=\"anchor\" aria-label=\"Permalink: API Pattern\" href=\"#api-pattern\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eIn general, both reading and writing follow a similar pattern:\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"Sep/Spec =\u0026gt; SepReaderOptions =\u0026gt; SepReader =\u0026gt; Row =\u0026gt; Col(s) =\u0026gt; Span/ToString/Parse\nSep/Spec =\u0026gt; SepWriterOptions =\u0026gt; SepWriter =\u0026gt; Row =\u0026gt; Col(s) =\u0026gt; Set/Format\"\u003e\u003cpre lang=\"text\" class=\"notranslate\"\u003e\u003ccode\u003eSep/Spec =\u0026gt; SepReaderOptions =\u0026gt; SepReader =\u0026gt; Row =\u0026gt; Col(s) =\u0026gt; Span/ToString/Parse\nSep/Spec =\u0026gt; SepWriterOptions =\u0026gt; SepWriter =\u0026gt; Row =\u0026gt; Col(s) =\u0026gt; Set/Format\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003ewhere each continuation flows fluently from the preceding type. For example,\n\u003ccode\u003eReader()\u003c/code\u003e is an extension method to \u003ccode\u003eSep\u003c/code\u003e or \u003ccode\u003eSepSpec\u003c/code\u003e that returns a\n\u003ccode\u003eSepReaderOptions\u003c/code\u003e. Similarly, \u003ccode\u003eWriter()\u003c/code\u003e is an extension method to \u003ccode\u003eSep\u003c/code\u003e or\n\u003ccode\u003eSepSpec\u003c/code\u003e that returns a \u003ccode\u003eSepWriterOptions\u003c/code\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"/nietras/Sep/blob/main/src/Sep/SepReaderOptions.cs\"\u003e\u003ccode\u003eSepReaderOptions\u003c/code\u003e\u003c/a\u003e and\n\u003ca href=\"/nietras/Sep/blob/main/src/Sep/SepWriterOptions.cs\"\u003e\u003ccode\u003eSepWriterOptions\u003c/code\u003e\u003c/a\u003e are optionally configurable.\nThat and the APIs for reader and writer is covered in the following sections.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eFor a complete example, see the \u003ca href=\"#example\"\u003eexample\u003c/a\u003e above or the\n\u003ca href=\"/nietras/Sep/blob/main/src/Sep.XyzTest/ReadMeTest.cs\"\u003eReadMeTest.cs\u003c/a\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e⚠ Note that it is important to understand that Sep \u003ccode\u003eRow\u003c/code\u003e/\u003ccode\u003eCol\u003c/code\u003e/\u003ccode\u003eCols\u003c/code\u003e are \u003ca href=\"https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/ref-struct\" rel=\"nofollow\"\u003e\u003ccode\u003eref struct\u003c/code\u003e\u003c/a\u003es\n(please follow the \u003ccode\u003eref struct\u003c/code\u003e link and understand how this limits the usage of\nthose). This is due to these types being simple \u003cem\u003efacades\u003c/em\u003e or indirections to the\nunderlying reader or writer. That means you cannot use LINQ or create an array\nof all rows like \u003ccode\u003ereader.ToArray()\u003c/code\u003e. While for .NET9+ the reader is now\n\u003ccode\u003eIEnumerable\u0026lt;\u0026gt;\u003c/code\u003e since \u003ccode\u003eref struct\u003c/code\u003es can now be used in interfaces that have\n\u003ca href=\"https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-13.0/ref-struct-interfaces\" rel=\"nofollow\"\u003e\u003ccode\u003ewhere T: allows ref struct\u003c/code\u003e\u003c/a\u003e\nthis still does not mean it is LINQ compatible. Hence, if you need store per row\nstate or similar you need to parse or copy to different types instead. The same\napplies to \u003ccode\u003eCol\u003c/code\u003e/\u003ccode\u003eCols\u003c/code\u003e which point to internal state that is also reused. This\nis to avoid repeated allocations for each row and get the best possible\nperformance, while still defining a well structured and straightforward API that\nguides users to relevant functionality. See \u003ca href=\"#why-sepreader-was-not-ienumerable-until-net-9-and-is-not-linq-compatible\"\u003eWhy SepReader Was Not IEnumerable\nUntil .NET 9 and Is Not LINQ\nCompatible\u003c/a\u003e\nfor more.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e⚠ For a full overview of public types and methods see \u003ca href=\"#public-api-reference\"\u003ePublic API\nReference\u003c/a\u003e.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eSepReader API\u003c/h3\u003e\u003ca id=\"user-content-sepreader-api\" class=\"anchor\" aria-label=\"Permalink: SepReader API\" href=\"#sepreader-api\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003eSepReader\u003c/code\u003e API has the following structure (in pseudo-C# code):\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"using var reader = Sep.Reader(o =\u0026gt; o).FromFile/FromText/From...;\nvar header = reader.Header;\nvar _ = header.IndexOf/IndicesOf/NamesStartingWith...;\nforeach (var row in reader)\n{\n var _ = row[colName/colNames].Span/ToString/Parse\u0026lt;T\u0026gt;...;\n var _ = row[colIndex/colIndices].Span/ToString/Parse\u0026lt;T\u0026gt;...;\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003eo \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eo\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eFromFile\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e/\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eFromText\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e/\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eFrom\u003c/span\u003e..\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eheader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eHeader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e_\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eheader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIndexOf\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e/\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIndicesOf\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e/\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eNamesStartingWith\u003c/span\u003e..\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e_\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecolName\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e/\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecolNames\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e/\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eToString\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e/\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eParse\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e..\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e_\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecolIndex\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e/\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecolIndices\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e/\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eToString\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e/\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eParse\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e..\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThat is, to use \u003ccode\u003eSepReader\u003c/code\u003e follow the points below:\u003c/p\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003eOptionally define \u003ccode\u003eSep\u003c/code\u003e or use default automatically inferred separator.\u003c/li\u003e\n\u003cli\u003eSpecify reader with optional configuration of \u003ccode\u003eSepReaderOptions\u003c/code\u003e. For\nexample, if a csv-file does not have a header this can be configured via:\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"Sep.Reader(o =\u0026gt; o with { HasHeader = false })\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003eo \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eo\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eHasHeader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003efalse\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\nFor all options see \u003ca href=\"#sepreaderoptions\"\u003eSepReaderOptions\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eSpecify source e.g. file, text (\u003ccode\u003estring\u003c/code\u003e), \u003ccode\u003eTextWriter\u003c/code\u003e, etc. via \u003ccode\u003eFrom\u003c/code\u003e\nextension methods.\u003c/li\u003e\n\u003cli\u003eOptionally access the header. For example, to get all columns starting with\n\u003ccode\u003eGT_\u003c/code\u003e use:\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var colNames = header.NamesStarting(\u0026quot;GT_\u0026quot;);\nvar colIndices = header.IndicesOf(colNames);\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolNames\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eheader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eNamesStarting\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"GT_\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolIndices\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eheader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eIndicesOf\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecolNames\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003c/li\u003e\n\u003cli\u003eEnumerate rows. One row at a time.\u003c/li\u003e\n\u003cli\u003eAccess a column by name or index. Or access multiple columns with names and\nindices. \u003ccode\u003eSep\u003c/code\u003e internally handles pooled allocation and reuse of arrays for\nmultiple columns.\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003eSpan\u003c/code\u003e to access the column directly as a \u003ccode\u003eReadOnlySpan\u0026lt;char\u0026gt;\u003c/code\u003e. Or use\n\u003ccode\u003eToString\u003c/code\u003e to convert to a \u003ccode\u003estring\u003c/code\u003e. Or use \u003ccode\u003eParse\u0026lt;T\u0026gt;\u003c/code\u003e where \u003ccode\u003eT : ISpanParsable\u0026lt;T\u0026gt;\u003c/code\u003e to parse the column \u003ccode\u003echar\u003c/code\u003es to a specific type.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eSepReaderOptions\u003c/h4\u003e\u003ca id=\"user-content-sepreaderoptions\" class=\"anchor\" aria-label=\"Permalink: SepReaderOptions\" href=\"#sepreaderoptions\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe following options are available:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"/// \u0026lt;summary\u0026gt;\n/// Specifies the separator used, if `null` then automatic detection \n/// is used based on first row in source.\n/// \u0026lt;/summary\u0026gt;\npublic Sep? Sep { get; init; } = null;\n/// \u0026lt;summary\u0026gt;\n/// Specifies initial internal `char` buffer length.\n/// \u0026lt;/summary\u0026gt;\n/// \u0026lt;remarks\u0026gt;\n/// The length will likely be rounded up to the nearest power of 2. A\n/// smaller buffer may end up being used if the underlying source for \u0026lt;see\n/// cref=\u0026quot;System.IO.TextReader\u0026quot;/\u0026gt; is known to be smaller. Prefer to keep the\n/// default length as that has been tuned for performance and cache sizes.\n/// Avoid making this unnecessarily large as that will likely not improve\n/// performance and may waste memory.\n/// \u0026lt;/remarks\u0026gt;\npublic int InitialBufferLength { get; init; } = SepDefaults.InitialBufferLength;\n/// \u0026lt;summary\u0026gt;\n/// Specifies the culture used for parsing. \n/// May be `null` for default culture.\n/// \u0026lt;/summary\u0026gt;\npublic CultureInfo? CultureInfo { get; init; } = SepDefaults.CultureInfo;\n/// \u0026lt;summary\u0026gt;\n/// Indicates whether the first row is a header row.\n/// \u0026lt;/summary\u0026gt;\npublic bool HasHeader { get; init; } = true;\n/// \u0026lt;summary\u0026gt;\n/// Specifies \u0026lt;see cref=\u0026quot;IEqualityComparer{T}\u0026quot; /\u0026gt; to use \n/// for comparing header column names and looking up index.\n/// \u0026lt;/summary\u0026gt;\npublic IEqualityComparer\u0026lt;string\u0026gt; ColNameComparer { get; init; } = SepDefaults.ColNameComparer;\n/// \u0026lt;summary\u0026gt;\n/// Specifies the method factory used to convert a column span \n/// of `char`s to a `string`.\n/// \u0026lt;/summary\u0026gt;\npublic SepCreateToString CreateToString { get; init; } = SepToString.Direct;\n/// \u0026lt;summary\u0026gt;\n/// Disables using [csFastFloat](https://github.com/CarlVerret/csFastFloat)\n/// for parsing `float` and `double`.\n/// \u0026lt;/summary\u0026gt;\npublic bool DisableFastFloat { get; init; } = false;\n/// \u0026lt;summary\u0026gt;\n/// Disables checking if column count is the same for all rows.\n/// \u0026lt;/summary\u0026gt;\npublic bool DisableColCountCheck { get; init; } = false;\n/// \u0026lt;summary\u0026gt;\n/// Disables detecting and parsing quotes.\n/// \u0026lt;/summary\u0026gt;\npublic bool DisableQuotesParsing { get; init; } = false;\n/// \u0026lt;summary\u0026gt;\n/// Unescape quotes on column access.\n/// \u0026lt;/summary\u0026gt;\n/// \u0026lt;remarks\u0026gt;\n/// When true, if a column starts with a quote then the two outermost quotes\n/// are removed and every second inner quote is removed. Note that\n/// unquote/unescape happens in-place, which means the \u0026lt;see\n/// cref=\u0026quot;SepReader.Row.Span\u0026quot; /\u0026gt; will be modified and contain \u0026quot;garbage\u0026quot;\n/// state after unescaped cols before next col. This is for efficiency to\n/// avoid allocating secondary memory for unescaped columns. Header\n/// columns/names will also be unescaped.\n/// Requires \u0026lt;see cref=\u0026quot;DisableQuotesParsing\u0026quot;/\u0026gt; to be false.\n/// \u0026lt;/remarks\u0026gt;\npublic bool Unescape { get; init; } = false;\n/// \u0026lt;summary\u0026gt;\n/// Option for trimming spaces (` ` - ASCII 32) on column access.\n/// \u0026lt;/summary\u0026gt;\n/// \u0026lt;remarks\u0026gt;\n/// By default no trimming is done. See \u0026lt;see cref=\u0026quot;SepTrim\u0026quot;/\u0026gt; for options.\n/// Note that trimming may happen in-place e.g. if also unescaping, which\n/// means the \u0026lt;see cref=\u0026quot;SepReader.Row.Span\u0026quot; /\u0026gt; will be modified and contain\n/// \u0026quot;garbage\u0026quot; state for trimmed/unescaped cols. This is for efficiency to\n/// avoid allocating secondary memory for trimmed/unescaped columns. Header\n/// columns/names will also be trimmed. Note that only the space ` ` (ASCII\n/// 32) character is trimmed, not any whitespace character.\n/// \u0026lt;/remarks\u0026gt;\npublic SepTrim Trim { get; init; } = SepTrim.None;\n/// \u0026lt;summary\u0026gt;\n/// Forwarded to \u0026lt;see\n/// cref=\u0026quot;System.Threading.Tasks.ValueTask.ConfigureAwait(bool)\u0026quot;/\u0026gt; or\n/// similar when async methods are called.\n/// \u0026lt;/summary\u0026gt;\npublic bool AsyncContinueOnCapturedContext { get; init; } = false;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e/// \u0026lt;summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// Specifies the separator used, if `null` then automatic detection \u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// is used based on first row in source.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003e\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// Specifies initial internal `char` buffer length.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;remarks\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// The length will likely be rounded up to the nearest power of 2. A\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// smaller buffer may end up being used if the underlying source for \u0026lt;see\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// cref=\"System.IO.TextReader\"/\u0026gt; is known to be smaller. Prefer to keep the\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// default length as that has been tuned for performance and cache sizes.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// Avoid making this unnecessarily large as that will likely not improve\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// performance and may waste memory.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/remarks\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eInitialBufferLength\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003e\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSepDefaults\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eInitialBufferLength\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// Specifies the culture used for parsing. \u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// May be `null` for default culture.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eCultureInfo\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eCultureInfo\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003e\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSepDefaults\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCultureInfo\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// Indicates whether the first row is a header row.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eHasHeader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003e\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003etrue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// Specifies \u0026lt;see cref=\"IEqualityComparer{T}\" /\u0026gt; to use \u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// for comparing header column names and looking up index.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eIEqualityComparer\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eColNameComparer\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003e\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSepDefaults\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eColNameComparer\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// Specifies the method factory used to convert a column span \u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// of `char`s to a `string`.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSepCreateToString\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eCreateToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003e\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSepToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDirect\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// Disables using [csFastFloat](https://github.com/CarlVerret/csFastFloat)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// for parsing `float` and `double`.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eDisableFastFloat\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003e\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003efalse\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// Disables checking if column count is the same for all rows.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eDisableColCountCheck\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003e\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003efalse\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// Disables detecting and parsing quotes.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eDisableQuotesParsing\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003e\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003efalse\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// Unescape quotes on column access.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;remarks\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// When true, if a column starts with a quote then the two outermost quotes\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// are removed and every second inner quote is removed. Note that\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// unquote/unescape happens in-place, which means the \u0026lt;see\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// cref=\"SepReader.Row.Span\" /\u0026gt; will be modified and contain \"garbage\"\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// state after unescaped cols before next col. This is for efficiency to\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// avoid allocating secondary memory for unescaped columns. Header\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// columns/names will also be unescaped.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// Requires \u0026lt;see cref=\"DisableQuotesParsing\"/\u0026gt; to be false.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/remarks\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eUnescape\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003e\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003efalse\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// Option for trimming spaces (` ` - ASCII 32) on column access.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;remarks\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// By default no trimming is done. See \u0026lt;see cref=\"SepTrim\"/\u0026gt; for options.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// Note that trimming may happen in-place e.g. if also unescaping, which\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// means the \u0026lt;see cref=\"SepReader.Row.Span\" /\u0026gt; will be modified and contain\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \"garbage\" state for trimmed/unescaped cols. This is for efficiency to\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// avoid allocating secondary memory for trimmed/unescaped columns. Header\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// columns/names will also be trimmed. Note that only the space ` ` (ASCII\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// 32) character is trimmed, not any whitespace character.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/remarks\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSepTrim\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eTrim\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003e\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSepTrim\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eNone\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// Forwarded to \u0026lt;see\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// cref=\"System.Threading.Tasks.ValueTask.ConfigureAwait(bool)\"/\u0026gt; or\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// similar when async methods are called.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eAsyncContinueOnCapturedContext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003e\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003efalse\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eUnescaping\u003c/h4\u003e\u003ca id=\"user-content-unescaping\" class=\"anchor\" aria-label=\"Permalink: Unescaping\" href=\"#unescaping\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eWhile great care has been taken to ensure Sep unescaping of quotes is both\ncorrect and fast, there is always the question of how does one respond to\ninvalid input.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe below table tries to summarize the behavior of Sep vs CsvHelper and Sylvan.\nNote that all do the same for valid input. There are differences for how invalid\ninput is handled. For Sep the design choice has been based on not wanting to\nthrow exceptions and to use a principle that is both reasonably fast and simple.\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eInput\u003c/th\u003e\n\u003cth\u003eValid\u003c/th\u003e\n\u003cth\u003eCsvHelper\u003c/th\u003e\n\u003cth\u003eCsvHelper¹\u003c/th\u003e\n\u003cth\u003eSylvan\u003c/th\u003e\n\u003cth\u003eSep²\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eTrue\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\"\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eTrue\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\"\"\"\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eTrue\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\"\"\"\"\"\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eTrue\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"\"\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\"a\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eTrue\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\"a\"\"a\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eTrue\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"a\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\"a\"\"a\"\"a\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eTrue\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"a\"a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"a\"a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"a\"a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"a\"a\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ea\"\"a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFalse\u003c/td\u003e\n\u003ctd\u003eEXCEPTION\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"\"a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"\"a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"\"a\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ea\"a\"a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFalse\u003c/td\u003e\n\u003ctd\u003eEXCEPTION\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"a\"a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"a\"a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"a\"a\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e·\"\"·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFalse\u003c/td\u003e\n\u003ctd\u003eEXCEPTION\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·\"\"·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·\"\"·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·\"\"·\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e·\"a\"·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFalse\u003c/td\u003e\n\u003ctd\u003eEXCEPTION\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·\"a\"·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·\"a\"·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·\"a\"·\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e·\"\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFalse\u003c/td\u003e\n\u003ctd\u003eEXCEPTION\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·\"\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·\"\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·\"\"\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e·\"a\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFalse\u003c/td\u003e\n\u003ctd\u003eEXCEPTION\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·\"a\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·\"a\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·\"a\"\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ea\"\"\"a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFalse\u003c/td\u003e\n\u003ctd\u003eEXCEPTION\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"\"\"a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"\"\"a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"\"\"a\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\"a\"a\"a\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFalse\u003c/td\u003e\n\u003ctd\u003eEXCEPTION\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eaa\"a\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"a\"a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eaa\"a\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\"\"·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFalse\u003c/td\u003e\n\u003ctd\u003eEXCEPTION\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\"a\"·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFalse\u003c/td\u003e\n\u003ctd\u003eEXCEPTION\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea·\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\"a\"\"\"a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFalse\u003c/td\u003e\n\u003ctd\u003eEXCEPTION\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eaa\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEXCEPTION\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"a\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\"a\"\"\"a\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFalse\u003c/td\u003e\n\u003ctd\u003eEXCEPTION\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eaa\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"a\u0026lt;NULL\u0026gt;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"a\"\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\"\"a\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFalse\u003c/td\u003e\n\u003ctd\u003eEXCEPTION\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\"a\"a\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFalse\u003c/td\u003e\n\u003ctd\u003eEXCEPTION\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eaa\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eaa\"\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\"\"a\"a\"\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFalse\u003c/td\u003e\n\u003ctd\u003eEXCEPTION\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"a\"\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"a\"a\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\"a\"\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\"\"\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFalse\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003eEXCEPTION\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\"\"\"\"\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFalse\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEXCEPTION\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"\"\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003e·\u003c/code\u003e (middle dot) is whitespace to make this visible\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e¹ CsvHelper with \u003ccode\u003eBadDataFound = null\u003c/code\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e² Sep with \u003ccode\u003eUnescape = true\u003c/code\u003e in \u003ccode\u003eSepReaderOptions\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eTrimming\u003c/h4\u003e\u003ca id=\"user-content-trimming\" class=\"anchor\" aria-label=\"Permalink: Trimming\" href=\"#trimming\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eSep supports trimming by the \u003ca href=\"/nietras/Sep/blob/main/src/Sep/SepTrim.cs\"\u003e\u003ccode\u003eSepTrim\u003c/code\u003e\u003c/a\u003e flags enum, which\nhas two options as documented there. Below the result of both trimming and\nunescaping is shown in comparison to CsvHelper. Note unescaping is enabled for\nall results shown. It is possible to trim without unescaping too, of course.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eAs can be seen Sep supports a simple principle of trimming \u003cem\u003ebefore\u003c/em\u003e and \u003cem\u003eafter\u003c/em\u003e\nunescaping with trimming before unescaping being important for unescaping if\nthere is a starting quote after spaces.\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eInput\u003c/th\u003e\n\u003cth\u003eCsvHelper Trim\u003c/th\u003e\n\u003cth\u003eCsvHelper InsideQuotes\u003c/th\u003e\n\u003cth\u003eCsvHelper All¹\u003c/th\u003e\n\u003cth\u003eSep Outer\u003c/th\u003e\n\u003cth\u003eSep AfterUnescape\u003c/th\u003e\n\u003cth\u003eSep All²\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e·a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ea·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e·a·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·a·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e·a·a·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea·a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·a·a·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea·a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea·a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea·a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea·a\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\"a\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\"·a\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\"a·\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\"·a·\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·a·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·a·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\"·a·a·\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·a·a·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea·a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea·a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·a·a·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea·a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea·a\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e·\"a\"·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·\"a\"·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"a\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e·\"·a\"·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·\"·a\"·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"·a\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e·\"a·\"·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·\"a·\"·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"a·\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e·\"·a·\"·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·a·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·\"·a·\"·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·a·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"·a·\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e·\"·a·a·\"·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·a·a·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·\"·a·a·\"·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea·a\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·a·a·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"·a·a·\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea·a\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003e·\u003c/code\u003e (middle dot) is whitespace to make this visible\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e¹ CsvHelper with \u003ccode\u003eTrimOptions.Trim | TrimOptions.InsideQuotes\u003c/code\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e² Sep with \u003ccode\u003eSepTrim.All = SepTrim.Outer | SepTrim.AfterUnescape\u003c/code\u003e in\n\u003ccode\u003eSepReaderOptions\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eSepReader Debuggability\u003c/h4\u003e\u003ca id=\"user-content-sepreader-debuggability\" class=\"anchor\" aria-label=\"Permalink: SepReader Debuggability\" href=\"#sepreader-debuggability\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eDebuggability is an important part of any library and while this is still a work\nin progress for Sep, \u003ccode\u003eSepReader\u003c/code\u003e does have a unique feature when looking at it\nand it's row or cols in a debug context. Given the below example code:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var text = \u0026quot;\u0026quot;\u0026quot;\n Key;Value\n A;\u0026quot;1\n 2\n 3\u0026quot;\n B;\u0026quot;Apple\n Banana\n Orange\n Pear\u0026quot;\n \u0026quot;\u0026quot;\u0026quot;;\nusing var reader = Sep.Reader().FromText(text);\nforeach (var row in reader)\n{\n // Hover over reader, row or col when breaking here\n var col = row[1];\n if (Debugger.IsAttached \u0026amp;\u0026amp; row.RowIndex == 2) { Debugger.Break(); }\n Debug.WriteLine(col.ToString());\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Key;Value\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e A;\"1\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e 2\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e 3\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e B;\"Apple\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Banana\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Orange\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Pear\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e// Hover over reader, row or col when breaking here\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecol\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDebugger\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIsAttached\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRowIndex\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eDebugger\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eBreak\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eDebug\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eWriteLine\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecol\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eand you are hovering over \u003ccode\u003ereader\u003c/code\u003e when the break is triggered then this will\nshow something like:\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"String Length=55\"\u003e\u003cpre lang=\"text\" class=\"notranslate\"\u003e\u003ccode\u003eString Length=55\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThat is, it will show information of the source for the reader, in this case a\nstring of length 55.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eSepReader.Row Debuggability\u003c/h5\u003e\u003ca id=\"user-content-sepreaderrow-debuggability\" class=\"anchor\" aria-label=\"Permalink: SepReader.Row Debuggability\" href=\"#sepreaderrow-debuggability\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eIf you are hovering over \u003ccode\u003erow\u003c/code\u003e then this will show something like:\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\" 2:[5..9] = \u0026quot;B;\\\u0026quot;Apple\\r\\nBanana\\r\\nOrange\\r\\nPear\\\u0026quot;\u0026quot;\"\u003e\u003cpre lang=\"text\" class=\"notranslate\"\u003e\u003ccode\u003e 2:[5..9] = \"B;\\\"Apple\\r\\nBanana\\r\\nOrange\\r\\nPear\\\"\"\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThis has the format shown below.\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"\u0026lt;ROWINDEX\u0026gt;:[\u0026lt;LINENUMBERRANGE\u0026gt;] = \u0026quot;\u0026lt;ROW\u0026gt;\u0026quot;\"\u003e\u003cpre lang=\"text\" class=\"notranslate\"\u003e\u003ccode\u003e\u0026lt;ROWINDEX\u0026gt;:[\u0026lt;LINENUMBERRANGE\u0026gt;] = \"\u0026lt;ROW\u0026gt;\"\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eNote how this shows line number range \u003ccode\u003e[FromIncl..ToExcl]\u003c/code\u003e, as in C# \u003ca href=\"https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-8.0/ranges#systemrange\" rel=\"nofollow\"\u003erange\nexpression\u003c/a\u003e,\nso that one can easily find the row in question in \u003ccode\u003enotepad\u003c/code\u003e or similar. This\nmeans Sep has to track line endings inside quotes and is an example of a feature\nthat makes Sep a bit slower but which is a price considered worth paying.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp dir=\"auto\"\u003eGitHub doesn't show line numbers in code blocks so consider copying the\nexample text to notepad or similar to see the effect.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp dir=\"auto\"\u003eAdditionally, if you expand the \u003ccode\u003erow\u003c/code\u003e in the debugger (e.g. via the small\ntriangle) you will see each column of the row similar to below.\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"00:'Key' = \u0026quot;B\u0026quot;\n01:'Value' = \u0026quot;\\\u0026quot;Apple\\r\\nBanana\\r\\nOrange\\r\\nPear\\\u0026quot;\u0026quot;\"\u003e\u003cpre lang=\"text\" class=\"notranslate\"\u003e\u003ccode\u003e00:'Key' = \"B\"\n01:'Value' = \"\\\"Apple\\r\\nBanana\\r\\nOrange\\r\\nPear\\\"\"\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eSepReader.Col Debuggability\u003c/h5\u003e\u003ca id=\"user-content-sepreadercol-debuggability\" class=\"anchor\" aria-label=\"Permalink: SepReader.Col Debuggability\" href=\"#sepreadercol-debuggability\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eIf you hover over \u003ccode\u003ecol\u003c/code\u003e you should see:\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"\u0026quot;\\\u0026quot;Apple\\r\\nBanana\\r\\nOrange\\r\\nPear\\\u0026quot;\u0026quot;\"\u003e\u003cpre lang=\"text\" class=\"notranslate\"\u003e\u003ccode\u003e\"\\\"Apple\\r\\nBanana\\r\\nOrange\\r\\nPear\\\"\"\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eWhy SepReader Was Not IEnumerable Until .NET 9 and Is Not LINQ Compatible\u003c/h4\u003e\u003ca id=\"user-content-why-sepreader-was-not-ienumerable-until-net-9-and-is-not-linq-compatible\" class=\"anchor\" aria-label=\"Permalink: Why SepReader Was Not IEnumerable Until .NET 9 and Is Not LINQ Compatible\" href=\"#why-sepreader-was-not-ienumerable-until-net-9-and-is-not-linq-compatible\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eAs mentioned earlier Sep only allows enumeration and access to one row at a time\nand \u003ccode\u003eSepReader.Row\u003c/code\u003e is just a simple \u003cem\u003efacade\u003c/em\u003e or indirection to the underlying\nreader. This is why it is defined as a \u003ccode\u003eref struct\u003c/code\u003e. In fact, the following\ncode:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"using var reader = Sep.Reader().FromText(text);\nforeach (var row in reader)\n{ }\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003ecan also be rewritten as:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"using var reader = Sep.Reader().FromText(text);\nwhile (reader.MoveNext())\n{\n var row = reader.Current;\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eMoveNext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCurrent\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003ewhere \u003ccode\u003erow\u003c/code\u003e is just a \u003cem\u003efacade\u003c/em\u003e for exposing row specific functionality. That is,\n\u003ccode\u003erow\u003c/code\u003e is still basically the \u003ccode\u003ereader\u003c/code\u003e underneath. Hence, let's look at using\nLINQ with \u003ccode\u003eSepReader\u003c/code\u003e implementing \u003ccode\u003eIEnumerable\u0026lt;SepReader.Row\u0026gt;\u003c/code\u003e and the \u003ccode\u003eRow\u003c/code\u003e\n\u003cem\u003enot\u003c/em\u003e being a \u003ccode\u003eref struct\u003c/code\u003e. Then, you would be able to write something like below:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"using var reader = Sep.Reader().FromText(text);\nSepReader.Row[] rows = reader.ToArray();\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erows\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToArray\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eGiven \u003ccode\u003eRow\u003c/code\u003e is just a facade for the reader, this would be equivalent to\nwriting:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"using var reader = Sep.Reader().FromText(text);\nSepReader[] rows = reader.ToArray();\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-smi\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erows\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToArray\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003ewhich hopefully makes it clear why this is not a good thing. The array would\neffectively be the reader repeated several times. If this would have to be\nsupported one would have to allocate memory for each row always, which would\nbasically be no different than a \u003ccode\u003eReadLine\u003c/code\u003e approach as benchmarked in\n\u003ca href=\"#comparison-benchmarks\"\u003eComparison Benchmarks\u003c/a\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThis is perhaps also the reason why no other efficient .NET CSV parser (known to\nauthor) implements an API pattern like Sep, but instead let the reader define\nall functionality directly and hence only let's you access the current row and\ncols on that. This API, however, is in this authors opinion not ideal and can be\na bit confusing, which is why Sep is designed like it is. The downside is the\nabove caveat.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe main culprit above is that for example \u003ccode\u003eToArray()\u003c/code\u003e would store a \u003ccode\u003eref struct\u003c/code\u003e in a heap allocated array, the actual enumeration is not a problem and\nhence implementing \u003ccode\u003eIEnumerable\u0026lt;SepReader.Row\u0026gt;\u003c/code\u003e is not the problem as such. The\nproblem was that prior to .NET 9 it was not possible to implement this interface\nwith \u003ccode\u003eT\u003c/code\u003e being a \u003ccode\u003eref struct\u003c/code\u003e, but with C# 13 \u003ccode\u003eallows ref struct\u003c/code\u003e and .NET 9\nhaving annotated such interfaces it is now possible and you can assign\n\u003ccode\u003eSepReader\u003c/code\u003e to \u003ccode\u003eIEnumerable\u003c/code\u003e, but most if not all of LINQ will still not work as\nshown below.\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var text = \u0026quot;\u0026quot;\u0026quot;\n Key;Value\n A;1.1\n B;2.2\n \u0026quot;\u0026quot;\u0026quot;;\nusing var reader = Sep.Reader().FromText(text);\nIEnumerable\u0026lt;SepReader.Row\u0026gt; enumerable = reader;\n// Currently, most LINQ methods do not work for ref types. See below.\n//\n// The type 'SepReader.Row' may not be a ref struct or a type parameter\n// allowing ref structs in order to use it as parameter 'TSource' in the\n// generic type or method 'Enumerable.Select\u0026lt;TSource,\n// TResult\u0026gt;(IEnumerable\u0026lt;TSource\u0026gt;, Func\u0026lt;TSource, TResult\u0026gt;)'\n//\n// enumerable.Select(row =\u0026gt; row[\u0026quot;Key\u0026quot;].ToString()).ToArray();\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Key;Value\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e A;1.1\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e B;2.2\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-smi\"\u003eIEnumerable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRow\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eenumerable\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e// Currently, most LINQ methods do not work for ref types. See below.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e// The type 'SepReader.Row' may not be a ref struct or a type parameter\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e// allowing ref structs in order to use it as parameter 'TSource' in the\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e// generic type or method 'Enumerable.Select\u0026lt;TSource,\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e// TResult\u0026gt;(IEnumerable\u0026lt;TSource\u0026gt;, Func\u0026lt;TSource, TResult\u0026gt;)'\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e// enumerable.Select(row =\u0026gt; row[\"Key\"].ToString()).ToArray();\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eCalling \u003ccode\u003eSelect\u003c/code\u003e should in principle be possible if this was annotated with \u003ccode\u003eallows ref struct\u003c/code\u003e, but it isn't currently.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eIf you want to use LINQ or similar you have to first parse or transform the rows\ninto some other type and enumerate it. This is easy to do and instead of\ncounting lines you should focus on how such enumeration can be easily expressed\nusing C# iterators (aka \u003ccode\u003eyield return\u003c/code\u003e). With local functions this can be done\ninside a method like:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var text = \u0026quot;\u0026quot;\u0026quot;\n Key;Value\n A;1.1\n B;2.2\n \u0026quot;\u0026quot;\u0026quot;;\nvar expected = new (string Key, double Value)[] {\n (\u0026quot;A\u0026quot;, 1.1),\n (\u0026quot;B\u0026quot;, 2.2),\n};\n\nusing var reader = Sep.Reader().FromText(text);\nvar actual = Enumerate(reader).ToArray();\n\nCollectionAssert.AreEqual(expected, actual);\n\nstatic IEnumerable\u0026lt;(string Key, double Value)\u0026gt; Enumerate(SepReader reader)\n{\n foreach (var row in reader)\n {\n yield return (row[\u0026quot;Key\u0026quot;].ToString(), row[\u0026quot;Value\u0026quot;].Parse\u0026lt;double\u0026gt;());\n }\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Key;Value\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e A;1.1\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e B;2.2\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eexpected\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eKey\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003edouble\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eValue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"A\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1.1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"B\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2.2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eactual\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eEnumerate\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToArray\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003eCollectionAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAreEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eexpected\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eactual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eIEnumerable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eKey\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003edouble\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eValue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eEnumerate\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eSepReader\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eyield\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Key\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Value\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eParse\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003edouble\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eNow if instead refactoring this to something LINQ-compatible by defining a\ncommon \u003ccode\u003eEnumerate\u003c/code\u003e or similar method it could be:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var text = \u0026quot;\u0026quot;\u0026quot;\n Key;Value\n A;1.1\n B;2.2\n \u0026quot;\u0026quot;\u0026quot;;\nvar expected = new (string Key, double Value)[] {\n (\u0026quot;A\u0026quot;, 1.1),\n (\u0026quot;B\u0026quot;, 2.2),\n};\n\nusing var reader = Sep.Reader().FromText(text);\nvar actual = Enumerate(reader,\n row =\u0026gt; (row[\u0026quot;Key\u0026quot;].ToString(), row[\u0026quot;Value\u0026quot;].Parse\u0026lt;double\u0026gt;()))\n .ToArray();\n\nCollectionAssert.AreEqual(expected, actual);\n\nstatic IEnumerable\u0026lt;T\u0026gt; Enumerate\u0026lt;T\u0026gt;(SepReader reader, SepReader.RowFunc\u0026lt;T\u0026gt; select)\n{\n foreach (var row in reader)\n {\n yield return select(row);\n }\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Key;Value\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e A;1.1\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e B;2.2\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eexpected\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eKey\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003edouble\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eValue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"A\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1.1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"B\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2.2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eactual\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eEnumerate\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n row \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Key\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Value\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eParse\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003edouble\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToArray\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003eCollectionAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAreEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eexpected\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eactual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eIEnumerable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eEnumerate\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eSepReader\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eRowFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-k\"\u003eselect\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eyield\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-k\"\u003eselect\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eIn fact, Sep provides such a convenience extension method. And, discounting the\n\u003ccode\u003eEnumerate\u003c/code\u003e method, this does have less boilerplate, but not really more\neffective lines of code. The issue here is that this tends to favor factoring\ncode in a way that can become very inefficient quickly. Consider if one wanted\nto only enumerate rows matching a predicate on \u003ccode\u003eKey\u003c/code\u003e which meant only 1% of rows\nwere to be enumerated e.g.:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var text = \u0026quot;\u0026quot;\u0026quot;\n Key;Value\n A;1.1\n B;2.2\n \u0026quot;\u0026quot;\u0026quot;;\nvar expected = new (string Key, double Value)[] {\n (\u0026quot;B\u0026quot;, 2.2),\n};\n\nusing var reader = Sep.Reader().FromText(text);\nvar actual = reader.Enumerate(\n row =\u0026gt; (row[\u0026quot;Key\u0026quot;].ToString(), row[\u0026quot;Value\u0026quot;].Parse\u0026lt;double\u0026gt;()))\n .Where(kv =\u0026gt; kv.Item1.StartsWith('B'))\n .ToArray();\n\nCollectionAssert.AreEqual(expected, actual);\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Key;Value\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e A;1.1\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e B;2.2\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eexpected\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eKey\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003edouble\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eValue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"B\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2.2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eactual\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEnumerate\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\n row \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Key\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Value\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eParse\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003edouble\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eWhere\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003ekv \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ekv\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eItem1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eStartsWith\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'B'\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToArray\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003eCollectionAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAreEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eexpected\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eactual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThis means you are still parsing the double (which is magnitudes slower than\ngetting just the key) for all rows. Imagine if this was an array of floating\npoints or similar. Not only would you then be parsing a lot of values you would\nalso be allocated 99x arrays that aren't used after filtering with \u003ccode\u003eWhere\u003c/code\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eInstead, you should focus on how to express the enumeration in a way that is\nboth efficient and easy to read. For example, the above could be rewritten as:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var text = \u0026quot;\u0026quot;\u0026quot;\n Key;Value\n A;1.1\n B;2.2\n \u0026quot;\u0026quot;\u0026quot;;\nvar expected = new (string Key, double Value)[] {\n (\u0026quot;B\u0026quot;, 2.2),\n};\n\nusing var reader = Sep.Reader().FromText(text);\nvar actual = Enumerate(reader).ToArray();\n\nCollectionAssert.AreEqual(expected, actual);\n\nstatic IEnumerable\u0026lt;(string Key, double Value)\u0026gt; Enumerate(SepReader reader)\n{\n foreach (var row in reader)\n {\n var keyCol = row[\u0026quot;Key\u0026quot;];\n if (keyCol.Span.StartsWith(\u0026quot;B\u0026quot;))\n {\n yield return (keyCol.ToString(), row[\u0026quot;Value\u0026quot;].Parse\u0026lt;double\u0026gt;());\n }\n }\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Key;Value\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e A;1.1\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e B;2.2\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eexpected\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eKey\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003edouble\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eValue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"B\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2.2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eactual\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eEnumerate\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToArray\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003eCollectionAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAreEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eexpected\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eactual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eIEnumerable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eKey\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003edouble\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eValue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eEnumerate\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eSepReader\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ekeyCol\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Key\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ekeyCol\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSpan\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eStartsWith\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"B\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eyield\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ekeyCol\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Value\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eParse\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003edouble\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eTo accomodate this Sep provides an overload for \u003ccode\u003eEnumerate\u003c/code\u003e that is similar to:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"static IEnumerable\u0026lt;T\u0026gt; Enumerate\u0026lt;T\u0026gt;(this SepReader reader, SepReader.RowTryFunc\u0026lt;T\u0026gt; trySelect)\n{\n foreach (var row in reader)\n {\n if (trySelect(row, out var value))\n {\n yield return value;\n }\n }\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eIEnumerable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eEnumerate\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSepReader\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eRowTryFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etrySelect\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etrySelect\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eout\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eyield\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eWith this the above custom \u003ccode\u003eEnumerate\u003c/code\u003e can be replaced with:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var text = \u0026quot;\u0026quot;\u0026quot;\n Key;Value\n A;1.1\n B;2.2\n \u0026quot;\u0026quot;\u0026quot;;\nvar expected = new (string Key, double Value)[] {\n (\u0026quot;B\u0026quot;, 2.2),\n};\n\nusing var reader = Sep.Reader().FromText(text);\nvar actual = reader.Enumerate((SepReader.Row row, out (string Key, double Value) kv) =\u0026gt;\n{\n var keyCol = row[\u0026quot;Key\u0026quot;];\n if (keyCol.Span.StartsWith(\u0026quot;B\u0026quot;))\n {\n kv = (keyCol.ToString(), row[\u0026quot;Value\u0026quot;].Parse\u0026lt;double\u0026gt;());\n return true;\n }\n kv = default;\n return false;\n}).ToArray();\n\nCollectionAssert.AreEqual(expected, actual);\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Key;Value\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e A;1.1\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e B;2.2\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eexpected\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eKey\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003edouble\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eValue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"B\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2.2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eactual\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEnumerate\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRow\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eout\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eKey\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003edouble\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eValue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ekv\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ekeyCol\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Key\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ekeyCol\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSpan\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eStartsWith\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"B\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003ekv\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ekeyCol\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Value\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eParse\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003edouble\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003etrue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003ekv\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edefault\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003efalse\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToArray\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003eCollectionAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAreEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eexpected\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eactual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eNote how this is pretty much the same length as the previous custom \u003ccode\u003eEnumerate\u003c/code\u003e.\nAlso worse due to how C# requires specifying types for \u003ccode\u003eout\u003c/code\u003e parameters which\nthen requires all parameter types for the lambda to be specified. Hence, in this\ncase the custom \u003ccode\u003eEnumerate\u003c/code\u003e does not take significantly longer to write and is a\nlot more efficient than using LINQ \u003ccode\u003e.Where\u003c/code\u003e (also avoids allocating a string for\nkey for each row) and is easier to debug and perhaps even read. All examples\nabove can be seen in \u003ca href=\"/nietras/Sep/blob/main/src/Sep.XyzTest/ReadMeTest.cs\"\u003eReadMeTest.cs\u003c/a\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThere is a strong case for having an enumerate API though and that is for\nparallelized enumeration, which will be discussed next.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eParallelEnumerate and Enumerate\u003c/h4\u003e\u003ca id=\"user-content-parallelenumerate-and-enumerate\" class=\"anchor\" aria-label=\"Permalink: ParallelEnumerate and Enumerate\" href=\"#parallelenumerate-and-enumerate\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eAs discussed in the previous section Sep provides \u003ccode\u003eEnumerate\u003c/code\u003e convenience\nextension methods, that should be used carefully. Alongside these there are\n\u003ccode\u003eParallelEnumerate\u003c/code\u003e extension methods that provide very efficient multi-threaded\nenumeration. See \u003ca href=\"#comparison-benchmarks\"\u003ebenchmarks\u003c/a\u003e for numbers and \u003ca href=\"#public-api-reference\"\u003ePublic\nAPI Reference\u003c/a\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003eParallelEnumerate\u003c/code\u003e is build on top of LINQ \u003ccode\u003eAsParallel().AsOrdered()\u003c/code\u003e and will\nreturn exactly the same as \u003ccode\u003eEnumerate\u003c/code\u003e but with enumeration parallelized. This\nwill use more memory during execution and as many threads as possible via the\n.NET thread pool. When using \u003ccode\u003eParallelEnumerate\u003c/code\u003e one should, therefore (as\nalways), be certain the provided delegate does not refer to or change any\nmutable state.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003eParallelEnumerate\u003c/code\u003e comes with a lot of overhead compared to single-threaded\n\u003ccode\u003eforeach\u003c/code\u003e or \u003ccode\u003eEnumerate\u003c/code\u003e and should be used carefully based on measuring any\npotential benefit. Sep goes a long way to make this very efficient by using\npooled arrays and parsing multiple rows in batches, but if the source only has a\nfew rows then any benefit is unlikely.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eDue to \u003ccode\u003eParallelEnumerate\u003c/code\u003e being based on batches of rows it is also important\nnot to \"abuse\" it in-place of LINQ \u003ccode\u003eAsParallel\u003c/code\u003e. The idea is to use it for\n\u003cem\u003eparsing\u003c/em\u003e rows, not for doing expensive per row operations like loading an image\nor similar. In that case, you are better off using \u003ccode\u003eAsParallel()\u003c/code\u003e after\n\u003ccode\u003eParallelEnumerate\u003c/code\u003e or \u003ccode\u003eEnumerate\u003c/code\u003e similarly to:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"using var reader = Sep.Reader().FromFile(\u0026quot;very-long.csv\u0026quot;);\nvar results = reader.ParallelEnumerate(ParseRow)\n .AsParallel().AsOrdered()\n .Select(LoadData) // Expensive load\n .ToList();\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromFile\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"very-long.csv\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eresults\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eParallelEnumerate\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eParseRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAsParallel\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAsOrdered\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eSelect\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eLoadData\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// Expensive load\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToList\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eAs a rule of thumb if the time per row exceeds 1 millisecond consider moving the\nexpensive work to after \u003ccode\u003eParallelEnumerate\u003c/code\u003e/\u003ccode\u003eEnumerate\u003c/code\u003e,\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eSepWriter API\u003c/h3\u003e\u003ca id=\"user-content-sepwriter-api\" class=\"anchor\" aria-label=\"Permalink: SepWriter API\" href=\"#sepwriter-api\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003eSepWriter\u003c/code\u003e API has the following structure (in pseudo-C# code):\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"using var writer = Sep.Writer(o =\u0026gt; o).ToFile/ToText/To...;\nforeach (var data in EnumerateData())\n{\n using var row = writer.NewRow();\n var _ = row[colName/colNames].Set/Format\u0026lt;T\u0026gt;...;\n var _ = row[colIndex/colIndices].Set/Format\u0026lt;T\u0026gt;...;\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriter\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003eo \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eo\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eToFile\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e/\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eToText\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e/\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTo\u003c/span\u003e..\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edata\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eEnumerateData\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eNewRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e_\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecolName\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e/\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecolNames\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSet\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e/\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eFormat\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e..\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e_\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecolIndex\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e/\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecolIndices\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSet\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e/\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eFormat\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e..\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThat is, to use \u003ccode\u003eSepWriter\u003c/code\u003e follow the points below:\u003c/p\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003eOptionally define \u003ccode\u003eSep\u003c/code\u003e or use default automatically inferred separator.\u003c/li\u003e\n\u003cli\u003eSpecify writer with optional configuration of \u003ccode\u003eSepWriterOptions\u003c/code\u003e.\nFor all options see \u003ca href=\"#sepwriteroptions\"\u003eSepWriterOptions\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eSpecify destination e.g. file, text (\u003ccode\u003estring\u003c/code\u003e via \u003ccode\u003eStringWriter\u003c/code\u003e),\n\u003ccode\u003eTextWriter\u003c/code\u003e, etc. via \u003ccode\u003eTo\u003c/code\u003e extension methods.\u003c/li\u003e\n\u003cli\u003eMISSING: \u003ccode\u003eSepWriter\u003c/code\u003e currently does not allow you to define the header up\nfront. Instead, header is defined by the order in which column names are\naccessed/created when defining the row.\u003c/li\u003e\n\u003cli\u003eDefine new rows with \u003ccode\u003eNewRow\u003c/code\u003e. ⚠ Be sure to dispose any new rows before\nstarting the next! For convenience Sep provides an overload for \u003ccode\u003eNewRow\u003c/code\u003e that\ntakes a \u003ccode\u003eSepReader.Row\u003c/code\u003e and copies the columns from that row to the new row:\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"using var reader = Sep.Reader().FromText(text);\nusing var writer = reader.Spec.Writer().ToText();\nforeach (var readRow in reader)\n{ using var writeRow = writer.NewRow(readRow); }\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriter\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSpec\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereadRow\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriteRow\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eNewRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ereadRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003c/li\u003e\n\u003cli\u003eCreate a column by selecting by name or index. Or multiple columns via\nindices and names. \u003ccode\u003eSep\u003c/code\u003e internally handles pooled allocation and reuse of\narrays for multiple columns.\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003eSet\u003c/code\u003e to set the column value either as a \u003ccode\u003eReadOnlySpan\u0026lt;char\u0026gt;\u003c/code\u003e, \u003ccode\u003estring\u003c/code\u003e\nor via an interpolated string. Or use \u003ccode\u003eFormat\u0026lt;T\u0026gt;\u003c/code\u003e where \u003ccode\u003eT : IFormattable\u003c/code\u003e\nto format \u003ccode\u003eT\u003c/code\u003e to the column value.\u003c/li\u003e\n\u003cli\u003eRow is written when \u003ccode\u003eDispose\u003c/code\u003e is called on the row.\n\u003cblockquote\u003e\n\u003cp dir=\"auto\"\u003eNote this is to allow a row to be defined flexibly with both column\nremoval, moves and renames in the future. This is not yet supported.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eSepWriterOptions\u003c/h4\u003e\u003ca id=\"user-content-sepwriteroptions\" class=\"anchor\" aria-label=\"Permalink: SepWriterOptions\" href=\"#sepwriteroptions\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe following options are available:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"/// \u0026lt;summary\u0026gt;\n/// Specifies the separator used.\n/// \u0026lt;/summary\u0026gt;\npublic Sep Sep { get; init; }\n/// \u0026lt;summary\u0026gt;\n/// Specifies the culture used for parsing. \n/// May be `null` for default culture.\n/// \u0026lt;/summary\u0026gt;\npublic CultureInfo? CultureInfo { get; init; }\n/// \u0026lt;summary\u0026gt;\n/// Specifies whether to write a header row \n/// before data rows. Requires all columns \n/// to have a name. Otherwise, columns can be\n/// added by indexing alone.\n/// \u0026lt;/summary\u0026gt;\npublic bool WriteHeader { get; init; } = true;\n/// \u0026lt;summary\u0026gt;\n/// Disables checking if column count is the \n/// same for all rows.\n/// \u0026lt;/summary\u0026gt;\n/// \u0026lt;remarks\u0026gt;\n/// When true, the \u0026lt;see cref=\u0026quot;ColNotSetOption\u0026quot;/\u0026gt;\n/// will define how columns that are not set\n/// are handled. For example, whether to skip\n/// or write an empty column if a column has\n/// not been set for a given row.\n/// \u0026lt;para\u0026gt;\n/// If any columns are skipped, then columns of\n/// a row may, therefore, be out of sync with\n/// column names if \u0026lt;see cref=\u0026quot;WriteHeader\u0026quot;/\u0026gt;\n/// is true.\n/// \u0026lt;/para\u0026gt;\n/// As such, any number of columns can be\n/// written as long as done sequentially.\n/// \u0026lt;/remarks\u0026gt;\npublic bool DisableColCountCheck { get; init; } = false;\n/// \u0026lt;summary\u0026gt;\n/// Specifies how to handle columns that are \n/// not set.\n/// \u0026lt;/summary\u0026gt;\npublic SepColNotSetOption ColNotSetOption { get; init; } = SepColNotSetOption.Throw;\n/// \u0026lt;summary\u0026gt;\n/// Specifies whether to escape column names \n/// and values when writing.\n/// \u0026lt;/summary\u0026gt;\n/// \u0026lt;remarks\u0026gt;\n/// When true, if a column contains a separator \n/// (e.g. `;`), carriage return (`\\r`), line \n/// feed (`\\n` or quote (`\u0026quot;`) then the column \n/// is prefixed and suffixed with quotes `\u0026quot;` \n/// and any quote in the column is escaped by\n/// adding an extra quote so it becomes `\u0026quot;\u0026quot;`.\n/// Note that escape applies to column names \n/// too, but only the written name.\n/// \u0026lt;/remarks\u0026gt;\npublic bool Escape { get; init; } = false;\n/// \u0026lt;summary\u0026gt;\n/// Forwarded to \u0026lt;see\n/// cref=\u0026quot;System.Threading.Tasks.ValueTask.ConfigureAwait(bool)\u0026quot;/\u0026gt; or\n/// similar when async methods are called.\n/// \u0026lt;/summary\u0026gt;\npublic bool AsyncContinueOnCapturedContext { get; init; } = false;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e/// \u0026lt;summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// Specifies the separator used.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSep\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// Specifies the culture used for parsing. \u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// May be `null` for default culture.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eCultureInfo\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eCultureInfo\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// Specifies whether to write a header row \u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// before data rows. Requires all columns \u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// to have a name. Otherwise, columns can be\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// added by indexing alone.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eWriteHeader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003e\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003etrue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// Disables checking if column count is the \u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// same for all rows.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;remarks\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// When true, the \u0026lt;see cref=\"ColNotSetOption\"/\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// will define how columns that are not set\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// are handled. For example, whether to skip\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// or write an empty column if a column has\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// not been set for a given row.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;para\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// If any columns are skipped, then columns of\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// a row may, therefore, be out of sync with\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// column names if \u0026lt;see cref=\"WriteHeader\"/\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// is true.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/para\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// As such, any number of columns can be\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// written as long as done sequentially.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/remarks\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eDisableColCountCheck\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003e\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003efalse\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// Specifies how to handle columns that are \u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// not set.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSepColNotSetOption\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eColNotSetOption\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003e\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSepColNotSetOption\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThrow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// Specifies whether to escape column names \u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// and values when writing.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;remarks\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// When true, if a column contains a separator \u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// (e.g. `;`), carriage return (`\\r`), line \u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// feed (`\\n` or quote (`\"`) then the column \u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// is prefixed and suffixed with quotes `\"` \u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// and any quote in the column is escaped by\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// adding an extra quote so it becomes `\"\"`.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// Note that escape applies to column names \u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// too, but only the written name.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/remarks\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eEscape\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003e\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003efalse\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// Forwarded to \u0026lt;see\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// cref=\"System.Threading.Tasks.ValueTask.ConfigureAwait(bool)\"/\u0026gt; or\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// similar when async methods are called.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e/// \u0026lt;/summary\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eAsyncContinueOnCapturedContext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003e\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003efalse\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eEscaping\u003c/h4\u003e\u003ca id=\"user-content-escaping\" class=\"anchor\" aria-label=\"Permalink: Escaping\" href=\"#escaping\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eEscaping is not enabled by default in Sep, but when it is it gives the same\nresults as other popular CSV librares as shown below. Although, CsvHelper\nappears to be escaping spaces as well, which is not necessary.\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eInput\u003c/th\u003e\n\u003cth\u003eCsvHelper\u003c/th\u003e\n\u003cth\u003eSylvan\u003c/th\u003e\n\u003cth\u003eSep¹\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e``\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"·\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e·\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\";\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\";\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\";\"\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e,\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e,\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e,\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e,\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"\"\"\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"\"\"\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"\"\"\"\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\\r\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"\\r\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"\\r\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"\\r\"\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003e\\n\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"\\n\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"\\n\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"\\n\"\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ea\"aa\"aaa\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"a\"\"aa\"\"aaa\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"a\"\"aa\"\"aaa\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"a\"\"aa\"\"aaa\"\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ea;aa;aaa\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"a;aa;aaa\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"a;aa;aaa\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"a;aa;aaa\"\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003eSeparator/delimiter is set to semi-colon \u003ccode\u003e;\u003c/code\u003e (default for Sep)\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003e·\u003c/code\u003e (middle dot) is whitespace to make this visible\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003e\\r\u003c/code\u003e, \u003ccode\u003e\\n\u003c/code\u003e are carriage return and line feed special characters to make these visible\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e¹ Sep with \u003ccode\u003eEscape = true\u003c/code\u003e in \u003ccode\u003eSepWriterOptions\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAsync Support\u003c/h2\u003e\u003ca id=\"user-content-async-support\" class=\"anchor\" aria-label=\"Permalink: Async Support\" href=\"#async-support\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eSep supports efficient \u003ccode\u003eValueTask\u003c/code\u003e based asynchronous reading and writing.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eHowever, given both \u003ccode\u003eSepReader.Row\u003c/code\u003e and \u003ccode\u003eSepWriter.Row\u003c/code\u003e are \u003ccode\u003eref struct\u003c/code\u003es, as\nthey point to internal state and should only be used one at a time,\n\u003ccode\u003easync/await\u003c/code\u003e usage is only supported on C# 13.0+ as this has support for \u003cstrong\u003e\"ref\nand unsafe in iterators and async methods\"\u003c/strong\u003e as covered in \u003ca href=\"https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-13\" rel=\"nofollow\"\u003eWhat's new in C#\n13\u003c/a\u003e. Please\nconsult details in that for limitations and constraints due to this.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eSimilarly, \u003ccode\u003eSepReader\u003c/code\u003e only implements \u003ccode\u003eIAsyncEnumerable\u0026lt;SepReader.Row\u0026gt;\u003c/code\u003e (and\n\u003ccode\u003eIEnumerable\u0026lt;SepReader.Row\u0026gt;\u003c/code\u003e) for .NET 9.0+/C# 13.0+ since then the interfaces\nhave been annotated with \u003ccode\u003eallows ref struct\u003c/code\u003e for \u003ccode\u003eT\u003c/code\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eAsync support is provided on the existing \u003ccode\u003eSepReader\u003c/code\u003e and \u003ccode\u003eSepWriter\u003c/code\u003e types\nsimilar to how \u003ccode\u003eTextReader\u003c/code\u003e and \u003ccode\u003eTextWriter\u003c/code\u003e support both sync and async usage.\nThis means you as a developer are responsible for calling async methods and\nusing \u003ccode\u003eawait\u003c/code\u003e when necessary. See below for a simple example and consult tests\non GitHub for more examples.\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var text = \u0026quot;\u0026quot;\u0026quot;\n A;B;C;D;E;F\n Sep;🚀;1;1.2;0.1;0.5\n CSV;✅;2;2.2;0.2;1.5\n \n \u0026quot;\u0026quot;\u0026quot;; // Empty line at end is for line ending\n\nusing var reader = await Sep.Reader().FromTextAsync(text);\nawait using var writer = reader.Spec.Writer().ToText();\nawait foreach (var readRow in reader)\n{\n await using var writeRow = writer.NewRow(readRow);\n}\nAssert.AreEqual(text, writer.ToString());\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e A;B;C;D;E;F\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Sep;🚀;1;1.2;0.1;0.5\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e CSV;✅;2;2.2;0.2;1.5\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// Empty line at end is for line ending\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromTextAsync\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriter\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSpec\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereadRow\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriteRow\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eNewRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ereadRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAreEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eNote how for \u003ccode\u003eSepReader\u003c/code\u003e the \u003ccode\u003eFromTextAsync\u003c/code\u003e is suffixed with \u003ccode\u003eAsync\u003c/code\u003e to\nindicate async creation, this is due to the reader having to read the first row\nof the source at creation to determine both separator and, if file has a header,\ncolumn names of the header. The \u003ccode\u003eFrom*Async\u003c/code\u003e call then has to be \u003ccode\u003eawait\u003c/code\u003eed.\nAfter that rows can be enumerated asynchronously simply by putting \u003ccode\u003eawait\u003c/code\u003e\nbefore \u003ccode\u003eforeach\u003c/code\u003e. If one forgets to do that the rows will be enumerated\nsynchronously.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eFor \u003ccode\u003eSepWriter\u003c/code\u003e the usage is kind of reversed. \u003ccode\u003eTo*\u003c/code\u003e methods have no \u003ccode\u003eAsync\u003c/code\u003e\nvariants, since creation is synchronous. That is, \u003ccode\u003eStreamWriter\u003c/code\u003e is created by a\nsimple constructor call. Nothing is written until a header or row is defined and\n\u003ccode\u003eDispose\u003c/code\u003e/\u003ccode\u003eDisposeAsync\u003c/code\u003e is called on the row.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eFor reader nothing needs to be asynchronously disposed, so \u003ccode\u003eusing\u003c/code\u003e does not\nrequire \u003ccode\u003eawait\u003c/code\u003e. However, for \u003ccode\u003eSepWriter\u003c/code\u003e dispose may have to write/flush data\nto underlying \u003ccode\u003eTextWriter\u003c/code\u003e and hence it should be using \u003ccode\u003eDisposeAsync\u003c/code\u003e, so you\nmust use \u003ccode\u003eawait using\u003c/code\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eTo support cancellation many methods have overloads that accept a\n\u003ccode\u003eCancellationToken\u003c/code\u003e like the \u003ccode\u003eFrom*Async\u003c/code\u003e methods for creating a \u003ccode\u003eSepReader\u003c/code\u003e or\nfor example \u003ccode\u003eNewRow\u003c/code\u003e for \u003ccode\u003eSepWriter\u003c/code\u003e. Consult \u003ca href=\"#public-api-reference\"\u003ePublic API\nReference\u003c/a\u003e for full set of available methods.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eAdditionally, both \u003ca href=\"#sepreaderoptions\"\u003eSepReaderOptions\u003c/a\u003e and\n\u003ca href=\"#sepwriteroptions\"\u003eSepWriterOptions\u003c/a\u003e feature the \u003ccode\u003ebool AsyncContinueOnCapturedContext\u003c/code\u003e option that is forwarded to internal\n\u003ccode\u003eConfigureAwait\u003c/code\u003e calls, see the \u003ca href=\"https://devblogs.microsoft.com/dotnet/configureawait-faq/\" rel=\"nofollow\"\u003eConfigureAwait\nFAQ\u003c/a\u003e for details on\nthat.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eLimitations and Constraints\u003c/h2\u003e\u003ca id=\"user-content-limitations-and-constraints\" class=\"anchor\" aria-label=\"Permalink: Limitations and Constraints\" href=\"#limitations-and-constraints\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eSep is designed to be minimal and fast. As such, it has some limitations and\nconstraints:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eComments \u003ccode\u003e#\u003c/code\u003e are not directly supported. You can skip a row by:\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"foreach (var row in reader)\n{\n // Skip row if starts with #\n if (!row.Span.StartsWith(\u0026quot;#\u0026quot;))\n {\n // ...\n }\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e// Skip row if starts with #\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e!\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSpan\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eStartsWith\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"#\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e// ...\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\nThis does not allow skipping lines before a header row starting with \u003ccode\u003e#\u003c/code\u003e\nthough. In \u003ca href=\"#example-catalogue\"\u003eExample Catalogue\u003c/a\u003e a full example is given\ndetailing how to skip lines before header.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eComparison Benchmarks\u003c/h2\u003e\u003ca id=\"user-content-comparison-benchmarks\" class=\"anchor\" aria-label=\"Permalink: Comparison Benchmarks\" href=\"#comparison-benchmarks\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eTo investigate the performance of Sep it is compared to:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JoshClose/csvhelper\"\u003eCsvHelper\u003c/a\u003e - \u003cem\u003ethe\u003c/em\u003e most commonly\nused CSV library with a staggering\n\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/4d546ab7a4973807831c92912f347f7f0e0a56ba413e2581fd4999690e540bf6/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f63737668656c706572\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/4d546ab7a4973807831c92912f347f7f0e0a56ba413e2581fd4999690e540bf6/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f63737668656c706572\" alt=\"downloads\" data-canonical-src=\"https://img.shields.io/nuget/dt/csvhelper\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e downloads on NuGet. Fully\nfeatured and battle tested.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MarkPflug/Sylvan\"\u003eSylvan\u003c/a\u003e - is well-known and has\npreviously been shown to be \u003ca href=\"https://www.joelverhagen.com/blog/2020/12/fastest-net-csv-parsers\" rel=\"nofollow\"\u003ethe fastest CSV libraries for\nparsing\u003c/a\u003e\n(Sep changes that 😉).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eReadLine\u003c/code\u003e/\u003ccode\u003eWriteLine\u003c/code\u003e - basic naive implementations that read line by line\nand split on separator. While writing columns, separators and line endings\ndirectly. Does not handle quotes or similar correctly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eAll benchmarks are run from/to memory either with:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eStringReader\u003c/code\u003e or \u003ccode\u003eStreamReader + MemoryStream\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eStringWriter\u003c/code\u003e or \u003ccode\u003eStreamWriter + MemoryStream\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eThis to avoid confounding factors from reading from or writing to disk.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eWhen using \u003ccode\u003eStringReader\u003c/code\u003e/\u003ccode\u003eStringWriter\u003c/code\u003e each \u003ccode\u003echar\u003c/code\u003e counts as 2 bytes, when\nmeasuring throughput e.g. \u003ccode\u003eMB/s\u003c/code\u003e. When using \u003ccode\u003eStreamReader\u003c/code\u003e/\u003ccode\u003eStreamWriter\u003c/code\u003e\ncontent is UTF-8 encoded and each \u003ccode\u003echar\u003c/code\u003e typically counts as 1 byte, as content\nusually limited to 1 byte per char in UTF-8. Note that in .NET for \u003ccode\u003eTextReader\u003c/code\u003e\nand \u003ccode\u003eTextWriter\u003c/code\u003e data is converted to/from \u003ccode\u003echar\u003c/code\u003e, but for reading such\nconversion can often be just as fast as \u003ccode\u003eMemmove\u003c/code\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eBy default only \u003ccode\u003eStringReader\u003c/code\u003e/\u003ccode\u003eStringWriter\u003c/code\u003e results are shown, if a result is\nbased on \u003ccode\u003eStreamReader\u003c/code\u003e/\u003ccode\u003eStreamWriter\u003c/code\u003e it will be called out. Usually, results\nfor \u003ccode\u003eStreamReader\u003c/code\u003e/\u003ccode\u003eStreamWriter\u003c/code\u003e are in line with \u003ccode\u003eStringReader\u003c/code\u003e/\u003ccode\u003eStringWriter\u003c/code\u003e\nbut with half the throughput due to 1 byte vs 2 bytes. For brevity they are not\nshown here.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eFor all benchmark results, Sep has been defined as the \u003ccode\u003eBaseline\u003c/code\u003e in\n\u003ca href=\"https://benchmarkdotnet.org/\" rel=\"nofollow\"\u003eBenchmarkDotNet\u003c/a\u003e. This means \u003ccode\u003eRatio\u003c/code\u003e will be 1.00\nfor Sep. For the others \u003ccode\u003eRatio\u003c/code\u003e will then show how many \u003cem\u003etimes\u003c/em\u003e faster Sep is\nthan that. Or how many \u003cem\u003etimes\u003c/em\u003e more bytes are allocated in \u003ccode\u003eAlloc Ratio\u003c/code\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp dir=\"auto\"\u003eDisclaimer: Any comparison made is based on a number of preconditions and\nassumptions. Sep is a new library written from the ground up to use the latest\nand greatest features in .NET. CsvHelper has a long history and has to take\ninto account backwards compatibility and still supporting older runtimes, so\nmay not be able to easily utilize more recent features. Same goes for Sylvan.\nAdditionally, Sep has a different feature set compared to the two. Performance\nis a feature, but not the only feature. Keep that in mind when evaluating\nresults.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eRuntime and Platforms\u003c/h3\u003e\u003ca id=\"user-content-runtime-and-platforms\" class=\"anchor\" aria-label=\"Permalink: Runtime and Platforms\" href=\"#runtime-and-platforms\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe following runtime is used for benchmarking:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eNET 9.0.X\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eNOTE: \u003ca href=\"https://maoni0.medium.com/dynamically-adapting-to-application-sizes-2d72fcb6f1ea\" rel=\"nofollow\"\u003eGarbage Collection\nDATAS\u003c/a\u003e\nmode is disabled since this severely impacts (e.g. \u003ca href=\"https://github.com/dotnet/runtime/issues/109047\" data-hovercard-type=\"issue\" data-hovercard-url=\"/dotnet/runtime/issues/109047/hovercard\"\u003e1.7x\nslower\u003c/a\u003e) performance for some\nbenchmarks due to the bursty accumulated allocations. That is,\n\u003ccode\u003eGarbageCollectionAdaptationMode\u003c/code\u003e is set to \u003ccode\u003e0\u003c/code\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe following platforms are used for benchmarking:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eAMD EPYC 7763\u003c/code\u003e (Virtual) X64 Platform Information\n\u003cdiv class=\"highlight highlight-source-ini notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"OS=Ubuntu 22.04.5 LTS (Jammy Jellyfish)\nAMD EPYC 7763, 1 CPU, 4 logical and 2 physical cores\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eOS\u003c/span\u003e=Ubuntu 22.04.5 LTS (Jammy Jellyfish)\nAMD EPYC 7763, 1 CPU, 4 logical and 2 physical cores\u003c/pre\u003e\u003c/div\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eAMD Ryzen 7 PRO 7840U\u003c/code\u003e (Laptop on battery) X64 Platform Information\n\u003cdiv class=\"highlight highlight-source-ini notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"OS=Windows 11 (10.0.22631.4460/23H2/2023Update/SunValley3)\nAMD Ryzen 7 PRO 7840U w/ Radeon 780M Graphics, 1 CPU, 16 logical and 8 physical cores\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eOS\u003c/span\u003e=Windows 11 (10.0.22631.4460/23H2/2023Update/SunValley3)\nAMD Ryzen 7 PRO 7840U w/ Radeon 780M Graphics, 1 CPU, 16 logical and 8 physical cores\u003c/pre\u003e\u003c/div\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eAMD 5950X\u003c/code\u003e (Desktop) X64 Platform Information\n\u003cdiv class=\"highlight highlight-source-ini notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"OS=Windows 10 (10.0.19044.2846/21H2/November2021Update)\nAMD Ryzen 9 5950X, 1 CPU, 32 logical and 16 physical cores\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eOS\u003c/span\u003e=Windows 10 (10.0.19044.2846/21H2/November2021Update)\nAMD Ryzen 9 5950X, 1 CPU, 32 logical and 16 physical cores\u003c/pre\u003e\u003c/div\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eApple M1\u003c/code\u003e (Virtual) ARM64 Platform Information\n\u003cdiv class=\"highlight highlight-source-ini notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"OS=macOS Sonoma 14.7.1 (23H222) [Darwin 23.6.0]\nApple M1 (Virtual), 1 CPU, 3 logical and 3 physical cores\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eOS\u003c/span\u003e=macOS Sonoma 14.7.1 (23H222) [Darwin 23.6.0]\nApple M1 (Virtual), 1 CPU, 3 logical and 3 physical cores\u003c/pre\u003e\u003c/div\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eReader Comparison Benchmarks\u003c/h3\u003e\u003ca id=\"user-content-reader-comparison-benchmarks\" class=\"anchor\" aria-label=\"Permalink: Reader Comparison Benchmarks\" href=\"#reader-comparison-benchmarks\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe following reader scenarios are benchmarked:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joelverhagen/NCsvPerf\"\u003eNCsvPerf\u003c/a\u003e from \u003ca href=\"https://www.joelverhagen.com/blog/2020/12/fastest-net-csv-parsers\" rel=\"nofollow\"\u003eThe fastest CSV\nparser in\n.NET\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#floats-reader-comparison-benchmarks\"\u003e\u003cstrong\u003eFloats\u003c/strong\u003e\u003c/a\u003e as for example in machine learning.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eDetails for each can be found in the following. However, for each of these 3\ndifferent scopes are benchmarked to better assertain the low-level performance\nof each library and approach and what parts of the parsing consume the most\ntime:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003cstrong\u003eRow\u003c/strong\u003e - for this scope only the row is enumerated. That is, for Sep all\nthat is done is:\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"foreach (var row in reader) { }\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\nthis should capture parsing both row and columns but without accessing these.\nNote that some libraries (like Sylvan) will defer work for columns to when\nthese are accessed.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCols\u003c/strong\u003e - for this scope all rows and all columns are enumerated. If\npossible columns are accessed as spans, if not as strings, which then might\nmean a string has to be allocated. That is, for Sep this is:\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"foreach (var row in reader)\n{\n for (var i = 0; i \u0026lt; row.ColCount; i++)\n {\n var span = row[i].Span;\n }\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eColCount\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003espan\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSpan\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eXYZ\u003c/strong\u003e - finally the full scope is performed which is specific to each of\nthe scenarios.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eAdditionally, as Sep supports multi-threaded parsing via \u003ccode\u003eParallelEnumerate\u003c/code\u003e\nbenchmarks results with \u003ccode\u003e_MT\u003c/code\u003e in the method name are multi-threaded. These show\nSep provides unparalleled performance compared to any other CSV parser.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe overhead of Sep async support is also benchmarked and can be seen with\n\u003ccode\u003e_Async\u003c/code\u003e in the method name. Note that this is the absolute best case for async\ngiven there is no real IO involved and hence no actual asynchronous work or\ncontinuations (thus no \u003ccode\u003eTask\u003c/code\u003e allocations) since benchmarks run from memory\nonly. This is fine as the main purpose of the benchmark is to gauge the overhead\nof the async code path.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eNCsvPerf PackageAssets Reader Comparison Benchmarks\u003c/h4\u003e\u003ca id=\"user-content-ncsvperf-packageassets-reader-comparison-benchmarks\" class=\"anchor\" aria-label=\"Permalink: NCsvPerf PackageAssets Reader Comparison Benchmarks\" href=\"#ncsvperf-packageassets-reader-comparison-benchmarks\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/joelverhagen/NCsvPerf\"\u003eNCsvPerf\u003c/a\u003e from \u003ca href=\"https://www.joelverhagen.com/blog/2020/12/fastest-net-csv-parsers\" rel=\"nofollow\"\u003eThe fastest CSV\nparser in\n.NET\u003c/a\u003e is a\nbenchmark which in \u003ca href=\"https://twitter.com/joelverhagen\" rel=\"nofollow\"\u003eJoel Verhagen\u003c/a\u003e own\nwords was defined with:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp dir=\"auto\"\u003eMy goal was to find the fastest low-level CSV parser. Essentially, all I\nwanted was a library that gave me a string[] for each line where each field in\nthe line was an element in the array.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp dir=\"auto\"\u003eWhat is great about this work is it tests a whole of 35 different libraries and\napproaches to this. Providing a great overview of those and their performance on\nthis specific scenario. Given Sylvan is the fastest of those it is used as the\none to beat here, while CsvHelper is used to compare to the most commonly used\nlibrary.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe source used for this benchmark \u003ca href=\"/nietras/Sep/blob/main/src/Sep.ComparisonBenchmarks/PackageAssetsBench.cs\"\u003ePackageAssetsBench.cs\u003c/a\u003e is a\n\u003ca href=\"https://raw.githubusercontent.com/joelverhagen/NCsvPerf/main/NCsvPerf/TestData/PackageAssets.csv\" rel=\"nofollow\"\u003ePackageAssets.csv\u003c/a\u003e\nwith NuGet package information in 25 columns with rows like:\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"75fcf875-017d-4579-bfd9-791d3e6767f0,2020-11-28T01:50:41.2449947+00:00,Akinzekeel.BlazorGrid,0.9.1-preview,2020-11-27T22:42:54.3100000+00:00,AvailableAssets,RuntimeAssemblies,,,net5.0,,,,,,lib/net5.0/BlazorGrid.dll,BlazorGrid.dll,.dll,lib,net5.0,.NETCoreApp,5.0.0.0,,,0.0.0.0\n75fcf875-017d-4579-bfd9-791d3e6767f0,2020-11-28T01:50:41.2449947+00:00,Akinzekeel.BlazorGrid,0.9.1-preview,2020-11-27T22:42:54.3100000+00:00,AvailableAssets,CompileLibAssemblies,,,net5.0,,,,,,lib/net5.0/BlazorGrid.dll,BlazorGrid.dll,.dll,lib,net5.0,.NETCoreApp,5.0.0.0,,,0.0.0.0\n75fcf875-017d-4579-bfd9-791d3e6767f0,2020-11-28T01:50:41.2449947+00:00,Akinzekeel.BlazorGrid,0.9.1-preview,2020-11-27T22:42:54.3100000+00:00,AvailableAssets,ResourceAssemblies,,,net5.0,,,,,,lib/net5.0/de/BlazorGrid.resources.dll,BlazorGrid.resources.dll,.dll,lib,net5.0,.NETCoreApp,5.0.0.0,,,0.0.0.0\n75fcf875-017d-4579-bfd9-791d3e6767f0,2020-11-28T01:50:41.2449947+00:00,Akinzekeel.BlazorGrid,0.9.1-preview,2020-11-27T22:42:54.3100000+00:00,AvailableAssets,MSBuildFiles,,,any,,,,,,build/Microsoft.AspNetCore.StaticWebAssets.props,Microsoft.AspNetCore.StaticWebAssets.props,.props,build,any,Any,0.0.0.0,,,0.0.0.0\n75fcf875-017d-4579-bfd9-791d3e6767f0,2020-11-28T01:50:41.2449947+00:00,Akinzekeel.BlazorGrid,0.9.1-preview,2020-11-27T22:42:54.3100000+00:00,AvailableAssets,MSBuildFiles,,,any,,,,,,build/Akinzekeel.BlazorGrid.props,Akinzekeel.BlazorGrid.props,.props,build,any,Any,0.0.0.0,,,0.0.0.0\"\u003e\u003cpre lang=\"text\" class=\"notranslate\"\u003e\u003ccode\u003e75fcf875-017d-4579-bfd9-791d3e6767f0,2020-11-28T01:50:41.2449947+00:00,Akinzekeel.BlazorGrid,0.9.1-preview,2020-11-27T22:42:54.3100000+00:00,AvailableAssets,RuntimeAssemblies,,,net5.0,,,,,,lib/net5.0/BlazorGrid.dll,BlazorGrid.dll,.dll,lib,net5.0,.NETCoreApp,5.0.0.0,,,0.0.0.0\n75fcf875-017d-4579-bfd9-791d3e6767f0,2020-11-28T01:50:41.2449947+00:00,Akinzekeel.BlazorGrid,0.9.1-preview,2020-11-27T22:42:54.3100000+00:00,AvailableAssets,CompileLibAssemblies,,,net5.0,,,,,,lib/net5.0/BlazorGrid.dll,BlazorGrid.dll,.dll,lib,net5.0,.NETCoreApp,5.0.0.0,,,0.0.0.0\n75fcf875-017d-4579-bfd9-791d3e6767f0,2020-11-28T01:50:41.2449947+00:00,Akinzekeel.BlazorGrid,0.9.1-preview,2020-11-27T22:42:54.3100000+00:00,AvailableAssets,ResourceAssemblies,,,net5.0,,,,,,lib/net5.0/de/BlazorGrid.resources.dll,BlazorGrid.resources.dll,.dll,lib,net5.0,.NETCoreApp,5.0.0.0,,,0.0.0.0\n75fcf875-017d-4579-bfd9-791d3e6767f0,2020-11-28T01:50:41.2449947+00:00,Akinzekeel.BlazorGrid,0.9.1-preview,2020-11-27T22:42:54.3100000+00:00,AvailableAssets,MSBuildFiles,,,any,,,,,,build/Microsoft.AspNetCore.StaticWebAssets.props,Microsoft.AspNetCore.StaticWebAssets.props,.props,build,any,Any,0.0.0.0,,,0.0.0.0\n75fcf875-017d-4579-bfd9-791d3e6767f0,2020-11-28T01:50:41.2449947+00:00,Akinzekeel.BlazorGrid,0.9.1-preview,2020-11-27T22:42:54.3100000+00:00,AvailableAssets,MSBuildFiles,,,any,,,,,,build/Akinzekeel.BlazorGrid.props,Akinzekeel.BlazorGrid.props,.props,build,any,Any,0.0.0.0,,,0.0.0.0\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eFor \u003ccode\u003eScope = Asset\u003c/code\u003e the columns are parsed into a\n\u003ca href=\"/nietras/Sep/blob/main/src/Sep.ComparisonBenchmarks/PackageAsset.cs\"\u003e\u003ccode\u003ePackageAsset\u003c/code\u003e\u003c/a\u003e class, which\nconsists of 25 properties of which 22 are \u003ccode\u003estring\u003c/code\u003es. Each asset is accumulated\ninto a \u003ccode\u003eList\u0026lt;PackageAsset\u0026gt;\u003c/code\u003e. Each column is accessed as a \u003ccode\u003estring\u003c/code\u003e regardless.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThis means this benchmark is dominated by turning columns into \u003ccode\u003estring\u003c/code\u003es for the\ndecently fast parsers. Hence, the fastest libraries in this test employ string\npooling. That is, basically a custom dictionary from \u003ccode\u003eReadOnlySpan\u0026lt;char\u0026gt;\u003c/code\u003e to\n\u003ccode\u003estring\u003c/code\u003e, which avoids allocating a new \u003ccode\u003estring\u003c/code\u003e for repeated values. And as can\nbe seen in the csv-file there are a lot of repeated values. Both Sylvan and\nCsvHelper do this in the benchmark. So does Sep and as with Sep this is an\noptional configuration that has to be explicitly enable. For Sep this means the\nreader is created with something like:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"using var reader = Sep.Reader(o =\u0026gt; o with\n{\n HasHeader = false,\n CreateToString = SepToString.PoolPerCol(maximumStringLength: 128),\n})\n.From(CreateReader());\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003eo \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eo\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eHasHeader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003efalse\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eCreateToString\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSepToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ePoolPerCol\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003emaximumStringLength\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e128\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFrom\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCreateReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eWhat is unique for Sep is that it allows defining a pool per column e.g. via\n\u003ccode\u003eSepToString.PoolPerCol(...)\u003c/code\u003e. This is based on the fact\nthat often each column has its own set of values or strings that may be repeated\nwithout any overlap to other columns. This also allows one to define per column\nspecific handling of \u003ccode\u003eToString\u003c/code\u003e behavior. Whether to pool or not. Or even to use\na statically defined pool.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eSep supports unescaping via an option, see \u003ca href=\"#sepreaderoptions\"\u003eSepReaderOptions\u003c/a\u003e\nand \u003ca href=\"#unescaping\"\u003eUnescaping\u003c/a\u003e. Therefore, Sep has two methods being tested. The\ndefault \u003ccode\u003eSep\u003c/code\u003e without unescaping and \u003ccode\u003eSep_Unescape\u003c/code\u003e where unescaping is enabled.\nNote that only if there are quotes will there be any unescaping, but to support\nunescape one has to track extra state during parsing which means there is a\nslight cost no matter what, most notably for the \u003ccode\u003eCols\u003c/code\u003e scope. Sep is still the\nfastest of all (by far in many cases).\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ePackageAssets Benchmark Results\u003c/h5\u003e\u003ca id=\"user-content-packageassets-benchmark-results\" class=\"anchor\" aria-label=\"Permalink: PackageAssets Benchmark Results\" href=\"#packageassets-benchmark-results\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe results below show Sep is \u003cstrong\u003ethe fastest .NET CSV Parser\u003c/strong\u003e (for this\nbenchmark on these platforms and machines 😀). While for pure parsing allocating\nonly a fraction of the memory due to extensive use of pooling and the\n\u003ccode\u003eArrayPool\u0026lt;T\u0026gt;\u003c/code\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThis is in many aspects due to Sep having extremely optimized string pooling and\noptimized hashing of \u003ccode\u003eReadOnlySpan\u0026lt;char\u0026gt;\u003c/code\u003e, and thus not really due the the\ncsv-parsing itself, since that is not a big part of the time consumed. At least\nnot for a decently fast csv-parser.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eWith \u003ccode\u003eParallelEnumerate\u003c/code\u003e (MT) Sep is \u003cstrong\u003e\u0026gt;2x faster than Sylvan and up to 9x\nfaster than CsvHelper\u003c/strong\u003e.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch6 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAMD.EPYC.7763 - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h6\u003e\u003ca id=\"user-content-amdepyc7763---packageassets-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: AMD.EPYC.7763 - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#amdepyc7763---packageassets-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.427 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8487.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e68.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.02 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Async\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.656 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.07\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7954.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e73.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.03 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Unescape\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.473 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8376.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e69.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.15 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.12\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.429 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6567.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e88.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.67 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.48\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e21.587 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6.30\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1347.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e431.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e88608.3 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e86,496.57\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e63.743 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e18.60\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e456.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1274.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20.12 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e19.64\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.758 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6112.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e95.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.04 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Unescape\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e5.691 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e5110.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e113.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.04 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.204 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.72\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3545.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e164.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.68 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.42\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e22.823 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.80\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1274.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e456.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e88608.31 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e85,518.30\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e110.312 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e23.18\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e263.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2206.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e445.93 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e430.38\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e39.731 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e732.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e794.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13803.91 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e28.730 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.72\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1012.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e574.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13858.99 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e50.605 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.28\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e574.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1012.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13963.34 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e125.231 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.16\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e232.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2504.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e102135 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.40\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e127.145 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e228.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2542.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13971.75 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e850.145 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e581\u003c/td\u003e\n\u003ctd align=\"right\"\u003e684.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e850.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e266670.16 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e505.005 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.59\u003c/td\u003e\n\u003ctd align=\"right\"\u003e581\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1152.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e505.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e276118.02 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.04\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,035.263 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.22\u003c/td\u003e\n\u003ctd align=\"right\"\u003e581\u003c/td\u003e\n\u003ctd align=\"right\"\u003e562.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1035.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e266828.4 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2,597.222 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.06\u003c/td\u003e\n\u003ctd align=\"right\"\u003e581\u003c/td\u003e\n\u003ctd align=\"right\"\u003e224.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2597.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2038837.9 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.65\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2,649.300 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.12\u003c/td\u003e\n\u003ctd align=\"right\"\u003e581\u003c/td\u003e\n\u003ctd align=\"right\"\u003e219.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2649.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e266845.35 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch6 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h6\u003e\u003ca id=\"user-content-amdryzen7pro7840uwradeon780m---packageassets-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#amdryzen7pro7840uwradeon780m---packageassets-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.250 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6865.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e85.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.33 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Async\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.447 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.05\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6562.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e88.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.32 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.99\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Unescape\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.278 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6822.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e85.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.18 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.89\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.768 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.07\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6119.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e95.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.66 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6.48\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20.959 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.71\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1392.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e419.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e88608.26 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e74,925.56\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e65.193 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e14.64\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e447.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1303.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20.2 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e17.08\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6.747 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4325.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e134.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.19 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Unescape\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6.739 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4330.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e134.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.19 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.509 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.12\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3885.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e150.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.67 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6.46\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e23.536 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.50\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1239.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e470.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e88608.28 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e74,617.50\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e107.075 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e15.94\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e272.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2141.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e448.88 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e378.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e54.052 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e539.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1081.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13803.3 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e35.594 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.66\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e819.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e711.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13914.86 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e62.009 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.15\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e470.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1240.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13962.68 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e201.825 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.73\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e144.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4036.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e102134.43 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.40\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e135.566 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.51\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e215.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2711.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13972.69 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,047.265 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e583\u003c/td\u003e\n\u003ctd align=\"right\"\u003e557.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1047.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e266672.16 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e492.995 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.47\u003c/td\u003e\n\u003ctd align=\"right\"\u003e583\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1184.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e493.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e267823.63 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,218.367 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.16\u003c/td\u003e\n\u003ctd align=\"right\"\u003e583\u003c/td\u003e\n\u003ctd align=\"right\"\u003e479.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1218.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e266825.65 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3,276.776 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.13\u003c/td\u003e\n\u003ctd align=\"right\"\u003e583\u003c/td\u003e\n\u003ctd align=\"right\"\u003e178.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3276.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2038836.1 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.65\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2,683.525 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.56\u003c/td\u003e\n\u003ctd align=\"right\"\u003e583\u003c/td\u003e\n\u003ctd align=\"right\"\u003e217.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2683.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e266846.78 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch6 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAMD.Ryzen.9.5950X - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h6\u003e\u003ca id=\"user-content-amdryzen95950x---packageassets-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: AMD.Ryzen.9.5950X - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#amdryzen95950x---packageassets-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.230 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13088.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e44.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.09 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Async\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.379 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.07\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e12264.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e47.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.02 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.93\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Unescape\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.305 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.03\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e12657.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e46.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.02 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.93\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.993 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e9750.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e59.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.65 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.52\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e12.106 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e5.36\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2410.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e242.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e88608.25 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e87,077.59\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e43.313 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e19.19\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e673.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e866.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20.04 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e19.69\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.211 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e9089.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e64.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.02 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Unescape\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.845 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7589.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e76.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.02 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e5.065 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.58\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e5760.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e101.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.66 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.52\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e12.850 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2270.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e257.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e88608.25 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e86,910.78\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e68.999 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e21.49\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e422.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1380.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e445.85 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e437.31\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33.615 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e868.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e672.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13802.47 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20.231 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.60\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1442.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e404.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13992.1 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e34.762 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.03\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e839.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e695.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13962.2 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e97.204 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.89\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e300.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1944.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e102133.9 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.40\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e83.550 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.49\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e349.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1671.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13970.66 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e629.552 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e583\u003c/td\u003e\n\u003ctd align=\"right\"\u003e927.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e629.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e266669.13 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e261.089 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e583\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2236.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e261.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e267793.45 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e761.171 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.21\u003c/td\u003e\n\u003ctd align=\"right\"\u003e583\u003c/td\u003e\n\u003ctd align=\"right\"\u003e767.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e761.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e266825.09 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,636.526 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.60\u003c/td\u003e\n\u003ctd align=\"right\"\u003e583\u003c/td\u003e\n\u003ctd align=\"right\"\u003e356.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1636.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2038835.59 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.65\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,754.461 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.79\u003c/td\u003e\n\u003ctd align=\"right\"\u003e583\u003c/td\u003e\n\u003ctd align=\"right\"\u003e332.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1754.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e266833.16 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch6 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eApple.M1.(Virtual) - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h6\u003e\u003ca id=\"user-content-applem1virtual---packageassets-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: Apple.M1.(Virtual) - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#applem1virtual---packageassets-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.041 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7196.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e80.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1033 B\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Async\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.385 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.09\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6633.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e87.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e990 B\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.96\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Unescape\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.449 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.10\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6537.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e89.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e990 B\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.96\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e21.045 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e5.22\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1382.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e420.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6958 B\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6.74\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e21.449 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e5.32\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1356.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e429.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e90734895 B\u003c/td\u003e\n\u003ctd align=\"right\"\u003e87,836.30\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e46.465 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e11.52\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e626.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e929.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20692 B\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20.03\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e5.001 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e5816.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e100.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e994 B\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Unescape\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6.269 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.25\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4639.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e125.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e999 B\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e23.746 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.75\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1224.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e474.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6958 B\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e21.710 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.34\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1339.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e434.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e90734901 B\u003c/td\u003e\n\u003ctd align=\"right\"\u003e91,282.60\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e66.705 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.34\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e436.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1334.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e457440 B\u003c/td\u003e\n\u003ctd align=\"right\"\u003e460.20\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33.390 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e871.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e667.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e14134046 B\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e22.413 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.67\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1297.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e448.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e14280628 B\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e53.205 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.60\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e546.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1064.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e14296832 B\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e109.717 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.30\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e265.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2194.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e104585674 B\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.40\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e102.502 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.08\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e283.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2050.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e14305752 B\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e657.056 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e581\u003c/td\u003e\n\u003ctd align=\"right\"\u003e885.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e657.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e273070256 B\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e572.779 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.87\u003c/td\u003e\n\u003ctd align=\"right\"\u003e581\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1015.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e572.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e284492848 B\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.04\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,177.217 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.80\u003c/td\u003e\n\u003ctd align=\"right\"\u003e581\u003c/td\u003e\n\u003ctd align=\"right\"\u003e494.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1177.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e273228824 B\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2,052.148 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.13\u003c/td\u003e\n\u003ctd align=\"right\"\u003e581\u003c/td\u003e\n\u003ctd align=\"right\"\u003e283.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2052.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2087769848 B\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.65\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,733.243 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.65\u003c/td\u003e\n\u003ctd align=\"right\"\u003e581\u003c/td\u003e\n\u003ctd align=\"right\"\u003e335.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1733.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e273238320 B\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ePackageAssets Benchmark Results (SERVER GC)\u003c/h5\u003e\u003ca id=\"user-content-packageassets-benchmark-results-server-gc\" class=\"anchor\" aria-label=\"Permalink: PackageAssets Benchmark Results (SERVER GC)\" href=\"#packageassets-benchmark-results-server-gc\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe package assets benchmark (Scope \u003ccode\u003eAsset\u003c/code\u003e) has a very high base load in the\nform of the accumulated instances of \u003ccode\u003ePackageAsset\u003c/code\u003e and since Sep is so fast the\nGC becomes a significant bottleneck for the benchmark, especially for\nmulti-threaded parsing. Switching to \u003ca href=\"https://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/workstation-server-gc\" rel=\"nofollow\"\u003eSERVER\nGC\u003c/a\u003e\ncan, therefore, provide significant speedup as can be seen below.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eWith \u003ccode\u003eParallelEnumerate\u003c/code\u003e and server GC Sep is \u003cstrong\u003e\u0026gt;4x faster than Sylvan and up to\n18x faster than CsvHelper\u003c/strong\u003e. Breaking 4 GB/s parsing speed on package assets on\n5950X.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch6 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAMD.EPYC.7763 - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h6\u003e\u003ca id=\"user-content-amdepyc7763---packageassets-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: AMD.EPYC.7763 - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#amdepyc7763---packageassets-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33.15 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e877.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e663.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.48 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e16.87 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.51\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1724.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e337.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.55 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e45.40 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.37\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e640.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e908.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.63 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e62.51 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.89\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e465.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1250.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e99.74 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.40\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e120.39 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.63\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e241.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2407.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.64 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e680.86 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e581\u003c/td\u003e\n\u003ctd align=\"right\"\u003e854.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e680.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.41 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e346.45 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.51\u003c/td\u003e\n\u003ctd align=\"right\"\u003e581\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1679.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e346.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e268.56 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.03\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e888.66 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.31\u003c/td\u003e\n\u003ctd align=\"right\"\u003e581\u003c/td\u003e\n\u003ctd align=\"right\"\u003e654.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e888.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.58 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,267.46 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.86\u003c/td\u003e\n\u003ctd align=\"right\"\u003e581\u003c/td\u003e\n\u003ctd align=\"right\"\u003e459.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1267.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1991.05 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.65\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2,478.49 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.64\u003c/td\u003e\n\u003ctd align=\"right\"\u003e581\u003c/td\u003e\n\u003ctd align=\"right\"\u003e234.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2478.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.58 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch6 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h6\u003e\u003ca id=\"user-content-amdryzen7pro7840uwradeon780m---packageassets-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#amdryzen7pro7840uwradeon780m---packageassets-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e32.88 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e887.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e657.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.48 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e12.08 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.37\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2414.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e241.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.57 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e43.15 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.31\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e676.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e862.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.63 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e65.30 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.99\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e446.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1305.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e99.74 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.40\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e117.54 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.58\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e248.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2350.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.64 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e712.70 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e583\u003c/td\u003e\n\u003ctd align=\"right\"\u003e819.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e712.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.41 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e279.00 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.39\u003c/td\u003e\n\u003ctd align=\"right\"\u003e583\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2092.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e279.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e262.79 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e920.38 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e583\u003c/td\u003e\n\u003ctd align=\"right\"\u003e634.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e920.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.57 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,078.15 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.52\u003c/td\u003e\n\u003ctd align=\"right\"\u003e583\u003c/td\u003e\n\u003ctd align=\"right\"\u003e541.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1078.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1991.05 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.65\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2,417.96 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.40\u003c/td\u003e\n\u003ctd align=\"right\"\u003e583\u003c/td\u003e\n\u003ctd align=\"right\"\u003e241.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2418.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.58 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch6 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAMD.Ryzen.9.5950X - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h6\u003e\u003ca id=\"user-content-amdryzen95950x---packageassets-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: AMD.Ryzen.9.5950X - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#amdryzen95950x---packageassets-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20.951 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1392.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e419.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.48 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6.614 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.32\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4411.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e132.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.64 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e27.761 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1051.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e555.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.63 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33.516 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.60\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e870.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e670.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e99.74 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.40\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e77.007 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.68\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e378.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1540.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.64 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e432.887 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e583\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1348.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e432.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.41 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e119.430 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.28\u003c/td\u003e\n\u003ctd align=\"right\"\u003e583\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4888.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e119.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e261.39 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e559.550 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e583\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1043.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e559.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.57 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e573.637 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e583\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1017.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e573.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1991.05 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.65\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,537.602 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.55\u003c/td\u003e\n\u003ctd align=\"right\"\u003e583\u003c/td\u003e\n\u003ctd align=\"right\"\u003e379.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1537.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.58 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch6 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eApple.M1.(Virtual) - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h6\u003e\u003ca id=\"user-content-applem1virtual---packageassets-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: Apple.M1.(Virtual) - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#applem1virtual---packageassets-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e26.05 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1116.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e521.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.48 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e11.03 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.42\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2636.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e220.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.59 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e48.67 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.87\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e597.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e973.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.63 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e34.94 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.34\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e832.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e698.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e99.74 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.40\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e73.10 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.81\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e397.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1461.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.64 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e507.79 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e581\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1145.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e507.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.41 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e204.22 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.40\u003c/td\u003e\n\u003ctd align=\"right\"\u003e581\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2849.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e204.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e269.28 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.03\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e991.41 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.95\u003c/td\u003e\n\u003ctd align=\"right\"\u003e581\u003c/td\u003e\n\u003ctd align=\"right\"\u003e586.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e991.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.57 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,083.07 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.13\u003c/td\u003e\n\u003ctd align=\"right\"\u003e581\u003c/td\u003e\n\u003ctd align=\"right\"\u003e537.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1083.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1991.05 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.65\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,924.79 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.79\u003c/td\u003e\n\u003ctd align=\"right\"\u003e581\u003c/td\u003e\n\u003ctd align=\"right\"\u003e302.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1924.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.58 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ePackageAssets with Quotes Benchmark Results\u003c/h5\u003e\u003ca id=\"user-content-packageassets-with-quotes-benchmark-results\" class=\"anchor\" aria-label=\"Permalink: PackageAssets with Quotes Benchmark Results\" href=\"#packageassets-with-quotes-benchmark-results\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003eNCsvPerf\u003c/code\u003e does not examine performance in the face of quotes in the csv. This\nis relevant since some libraries like Sylvan will revert to a slower (not SIMD\nvectorized) parsing code path if it encounters quotes. Sep was designed to\nalways use SIMD vectorization no matter what.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eSince there are two extra \u003ccode\u003echar\u003c/code\u003es to handle per column, it does have a\nsignificant impact on performance, no matter what though. This is expected when\nlooking at the numbers. For each row of 25 columns, there are 24 separators\n(here \u003ccode\u003e,\u003c/code\u003e) and one set of line endings (here \u003ccode\u003e\\r\\n\u003c/code\u003e). That's 26 characters.\nAdding quotes around each of the 25 columns will add 50 characters or almost\ntriple the total to 76.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch6 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAMD.EPYC.7763 - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h6\u003e\u003ca id=\"user-content-amdepyc7763---packageassets-with-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: AMD.EPYC.7763 - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#amdepyc7763---packageassets-with-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e10.55 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3154.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e211.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.06 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Async\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e12.02 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.14\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2768.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e240.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.06 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Unescape\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e10.44 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.99\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3189.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e208.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.06 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e25.83 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.45\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1288.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e516.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.74 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.30\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e25.94 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.46\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1282.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e518.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e108778.82 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e102,568.61\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e77.25 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.32\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e430.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1545.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20.29 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e19.13\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e12.01 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2770.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e240.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.07 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Unescape\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.29 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.11\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2505.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e265.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.08 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e29.56 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.46\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1126.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e591.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.76 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.24\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e27.61 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.30\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1205.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e552.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e108778.82 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e101,447.64\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e107.02 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.91\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e311.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2140.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e445.93 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e415.88\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e47.85 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e695.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e956.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13802.84 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e30.16 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.63\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1103.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e603.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13862.06 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e72.55 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.52\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e458.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1450.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13963.14 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e155.62 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.25\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e213.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3112.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e122305.53 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.86\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e126.34 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.64\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e263.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2526.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13973.89 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e986.97 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e665\u003c/td\u003e\n\u003ctd align=\"right\"\u003e674.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e987.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e266670.24 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e587.82 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.60\u003c/td\u003e\n\u003ctd align=\"right\"\u003e665\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1132.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e587.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e272038.75 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.02\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,464.19 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.48\u003c/td\u003e\n\u003ctd align=\"right\"\u003e665\u003c/td\u003e\n\u003ctd align=\"right\"\u003e454.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1464.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e266840.84 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3,142.01 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.18\u003c/td\u003e\n\u003ctd align=\"right\"\u003e665\u003c/td\u003e\n\u003ctd align=\"right\"\u003e211.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3142.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2442321.3 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e9.16\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2,609.30 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.64\u003c/td\u003e\n\u003ctd align=\"right\"\u003e665\u003c/td\u003e\n\u003ctd align=\"right\"\u003e255.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2609.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e266834.41 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch6 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h6\u003e\u003ca id=\"user-content-amdryzen7pro7840uwradeon780m---packageassets-with-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#amdryzen7pro7840uwradeon780m---packageassets-with-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e10.41 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3206.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e208.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.21 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Async\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e10.75 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.03\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3105.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e215.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.17 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.97\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Unescape\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e10.32 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.99\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3233.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e206.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.21 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e26.60 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.51\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1254.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e532.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.72 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6.39\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e24.43 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.30\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1366.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e488.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e108778.79 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e90,048.08\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e71.27 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6.72\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e468.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1425.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e23.22 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e19.22\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e12.22 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2730.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e244.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.22 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Unescape\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.10 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.07\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2547.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e262.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.22 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e30.00 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.46\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1112.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e600.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.73 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6.35\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e25.36 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.08\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1316.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e507.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e108778.78 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e89,397.65\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e101.58 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.31\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e328.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2031.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e445.86 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e366.42\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e59.31 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e562.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1186.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13803.31 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41.53 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.70\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e803.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e830.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13939.88 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e81.00 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.37\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e412.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1619.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13962.41 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e244.05 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.12\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e136.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4881.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e122304.87 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.86\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e134.78 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.27\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e247.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2695.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13973.52 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,168.49 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e667\u003c/td\u003e\n\u003ctd align=\"right\"\u003e571.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1168.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e266670.8 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e670.66 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.57\u003c/td\u003e\n\u003ctd align=\"right\"\u003e667\u003c/td\u003e\n\u003ctd align=\"right\"\u003e995.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e670.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e268687.83 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,636.51 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.40\u003c/td\u003e\n\u003ctd align=\"right\"\u003e667\u003c/td\u003e\n\u003ctd align=\"right\"\u003e408.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1636.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e266825.86 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4,203.80 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.60\u003c/td\u003e\n\u003ctd align=\"right\"\u003e667\u003c/td\u003e\n\u003ctd align=\"right\"\u003e158.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4203.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2442318.99 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e9.16\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2,561.09 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.19\u003c/td\u003e\n\u003ctd align=\"right\"\u003e667\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2561.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e266837.54 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch6 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAMD.Ryzen.9.5950X - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h6\u003e\u003ca id=\"user-content-amdryzen95950x---packageassets-with-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: AMD.Ryzen.9.5950X - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#amdryzen95950x---packageassets-with-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.046 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4737.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e140.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.04 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Async\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.137 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.15\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4101.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e162.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.04 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Unescape\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.473 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.06\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4466.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e149.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.04 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e17.571 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.38\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1899.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e351.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.69 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.41\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e14.336 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.94\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2328.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e286.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e108778.75 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e104,689.33\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e52.672 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.12\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e633.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1053.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20.05 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e19.29\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.126 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4107.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e162.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.04 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Unescape\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e9.748 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3424.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e195.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.05 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20.503 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.52\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1628.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e410.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.7 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.39\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e16.513 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.03\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2021.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e330.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e108778.76 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e104,394.99\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e74.224 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e9.13\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e449.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1484.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e445.85 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e427.88\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e39.523 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e844.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e790.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13802.63 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e23.386 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.59\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1427.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e467.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13981.76 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e50.803 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e657.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1016.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13962.08 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e114.306 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.89\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e292.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2286.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e122304.45 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.86\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e88.786 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.25\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e375.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1775.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13970.43 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e752.681 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e667\u003c/td\u003e\n\u003ctd align=\"right\"\u003e887.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e752.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e266669 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e377.733 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.50\u003c/td\u003e\n\u003ctd align=\"right\"\u003e667\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1767.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e377.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e267992.5 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,091.345 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.45\u003c/td\u003e\n\u003ctd align=\"right\"\u003e667\u003c/td\u003e\n\u003ctd align=\"right\"\u003e611.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1091.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e266825.09 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2,615.390 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.47\u003c/td\u003e\n\u003ctd align=\"right\"\u003e667\u003c/td\u003e\n\u003ctd align=\"right\"\u003e255.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2615.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2442319.06 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e9.16\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,756.409 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e667\u003c/td\u003e\n\u003ctd align=\"right\"\u003e380.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1756.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e266839.53 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch6 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eApple.M1.(Virtual) - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h6\u003e\u003ca id=\"user-content-applem1virtual---packageassets-with-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: Apple.M1.(Virtual) - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#applem1virtual---packageassets-with-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e12.18 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2732.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e243.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.09 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Async\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e11.74 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.97\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2835.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e234.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.92\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Unescape\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e11.10 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.92\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2997.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e222.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.92\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e24.97 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.06\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1332.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e499.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6.79 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6.25\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e26.23 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.17\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1269.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e524.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e108778.81 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e100,080.42\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e49.35 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.08\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e674.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e986.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20.09 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e18.49\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e12.41 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2681.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e248.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Unescape\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e14.75 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.19\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2256.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e295.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e26.17 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.11\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1271.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e523.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6.79 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6.72\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e25.07 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.02\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1327.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e501.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e108778.8 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e107,622.70\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e78.74 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6.35\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e422.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1574.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e446.72 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e441.97\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e39.11 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e851.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e782.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13802.77 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e30.33 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.78\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1097.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e606.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13876.85 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e56.15 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.44\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e592.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1123.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13961.25 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e127.77 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.28\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2555.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e122305.8 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.86\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e80.19 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.06\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e415.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1603.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13971.07 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e794.37 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e665\u003c/td\u003e\n\u003ctd align=\"right\"\u003e838.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e794.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e266670.09 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e623.62 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.79\u003c/td\u003e\n\u003ctd align=\"right\"\u003e665\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1067.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e623.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e275579.94 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.03\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,218.66 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.54\u003c/td\u003e\n\u003ctd align=\"right\"\u003e665\u003c/td\u003e\n\u003ctd align=\"right\"\u003e546.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1218.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e266825.24 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2,426.00 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.06\u003c/td\u003e\n\u003ctd align=\"right\"\u003e665\u003c/td\u003e\n\u003ctd align=\"right\"\u003e274.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2426.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2442322 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e9.16\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2,183.43 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.75\u003c/td\u003e\n\u003ctd align=\"right\"\u003e665\u003c/td\u003e\n\u003ctd align=\"right\"\u003e304.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2183.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e266837.34 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ePackageAssets with Quotes Benchmark Results (SERVER GC)\u003c/h5\u003e\u003ca id=\"user-content-packageassets-with-quotes-benchmark-results-server-gc\" class=\"anchor\" aria-label=\"Permalink: PackageAssets with Quotes Benchmark Results (SERVER GC)\" href=\"#packageassets-with-quotes-benchmark-results-server-gc\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eHere again are benchmark results with server garbage collection, which provides\nsignificant speedup over workstation garbage collection.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch6 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAMD.EPYC.7763 - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h6\u003e\u003ca id=\"user-content-amdepyc7763---packageassets-with-quotes-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: AMD.EPYC.7763 - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#amdepyc7763---packageassets-with-quotes-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e39.11 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e851.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e782.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.48 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e23.02 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.59\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1445.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e460.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.53 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e64.15 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.64\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e518.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1283.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.63 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e69.84 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.79\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e476.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1396.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e119.44 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.86\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e119.33 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.05\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e278.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2386.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.64 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e851.15 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e665\u003c/td\u003e\n\u003ctd align=\"right\"\u003e782.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e851.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.41 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e433.22 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.51\u003c/td\u003e\n\u003ctd align=\"right\"\u003e665\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1536.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e433.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e262.82 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,328.75 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.56\u003c/td\u003e\n\u003ctd align=\"right\"\u003e665\u003c/td\u003e\n\u003ctd align=\"right\"\u003e501.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1328.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.57 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,477.57 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.74\u003c/td\u003e\n\u003ctd align=\"right\"\u003e665\u003c/td\u003e\n\u003ctd align=\"right\"\u003e450.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1477.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2385.07 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e9.16\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2,519.43 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.96\u003c/td\u003e\n\u003ctd align=\"right\"\u003e665\u003c/td\u003e\n\u003ctd align=\"right\"\u003e264.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2519.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.59 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch6 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h6\u003e\u003ca id=\"user-content-amdryzen7pro7840uwradeon780m---packageassets-with-quotes-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#amdryzen7pro7840uwradeon780m---packageassets-with-quotes-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e40.64 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e821.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e812.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.48 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e22.02 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.54\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1515.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e440.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.59 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e65.40 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.61\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e510.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1308.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.63 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e86.96 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.14\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e383.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1739.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e119.44 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.86\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e113.09 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.78\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e295.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2261.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.64 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e837.08 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e667\u003c/td\u003e\n\u003ctd align=\"right\"\u003e797.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e837.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.41 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e424.07 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.51\u003c/td\u003e\n\u003ctd align=\"right\"\u003e667\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1574.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e424.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e262.92 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,355.96 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.62\u003c/td\u003e\n\u003ctd align=\"right\"\u003e667\u003c/td\u003e\n\u003ctd align=\"right\"\u003e492.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1356.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.57 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,145.13 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.37\u003c/td\u003e\n\u003ctd align=\"right\"\u003e667\u003c/td\u003e\n\u003ctd align=\"right\"\u003e583.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1145.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2385.07 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e9.16\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2,308.37 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.76\u003c/td\u003e\n\u003ctd align=\"right\"\u003e667\u003c/td\u003e\n\u003ctd align=\"right\"\u003e289.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2308.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.58 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch6 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAMD.Ryzen.9.5950X - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h6\u003e\u003ca id=\"user-content-amdryzen95950x---packageassets-with-quotes-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: AMD.Ryzen.9.5950X - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#amdryzen95950x---packageassets-with-quotes-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e26.42 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1263.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e528.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.48 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e11.53 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.44\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2894.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e230.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.64 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e43.05 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.63\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e775.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e861.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.63 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e37.30 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e894.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e746.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e119.44 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.86\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e78.91 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.99\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e423.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1578.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.64 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e538.48 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e667\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1240.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e538.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.43 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e213.29 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.40\u003c/td\u003e\n\u003ctd align=\"right\"\u003e667\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3130.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e213.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e261.37 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e879.04 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.63\u003c/td\u003e\n\u003ctd align=\"right\"\u003e667\u003c/td\u003e\n\u003ctd align=\"right\"\u003e759.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e879.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.57 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e642.57 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.19\u003c/td\u003e\n\u003ctd align=\"right\"\u003e667\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1039.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e642.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2385.07 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e9.16\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,598.79 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.97\u003c/td\u003e\n\u003ctd align=\"right\"\u003e667\u003c/td\u003e\n\u003ctd align=\"right\"\u003e417.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1598.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.58 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch6 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eApple.M1.(Virtual) - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h6\u003e\u003ca id=\"user-content-applem1virtual---packageassets-with-quotes-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: Apple.M1.(Virtual) - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#applem1virtual---packageassets-with-quotes-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41.29 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.03\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e806.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e825.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.48 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e31.46 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.78\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1058.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e629.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.53 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e58.99 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.47\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e564.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1179.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.63 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e57.46 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.43\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e579.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1149.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e119.44 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.86\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e85.16 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.12\u003c/td\u003e\n\u003ctd align=\"right\"\u003e33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e390.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1703.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.64 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e696.42 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e665\u003c/td\u003e\n\u003ctd align=\"right\"\u003e956.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e696.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.41 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e529.92 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.76\u003c/td\u003e\n\u003ctd align=\"right\"\u003e665\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1256.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e529.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e266.15 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.02\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,168.96 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.68\u003c/td\u003e\n\u003ctd align=\"right\"\u003e665\u003c/td\u003e\n\u003ctd align=\"right\"\u003e569.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1169.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.57 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,593.69 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e665\u003c/td\u003e\n\u003ctd align=\"right\"\u003e417.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1593.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2385.08 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e9.16\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eAsset\u003c/td\u003e\n\u003ctd\u003e1000000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1,663.19 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.39\u003c/td\u003e\n\u003ctd align=\"right\"\u003e665\u003c/td\u003e\n\u003ctd align=\"right\"\u003e400.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1663.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e260.58 MB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ePackageAssets with Spaces and Quotes Benchmark Results\u003c/h5\u003e\u003ca id=\"user-content-packageassets-with-spaces-and-quotes-benchmark-results\" class=\"anchor\" aria-label=\"Permalink: PackageAssets with Spaces and Quotes Benchmark Results\" href=\"#packageassets-with-spaces-and-quotes-benchmark-results\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eSimilar to the benchmark related to quotes here spaces \u003ccode\u003e \u003c/code\u003e and quotes \u003ccode\u003e\"\u003c/code\u003e are\nadded to relevant columns to benchmark impact of trimming and unescape on low\nlevel column access. That is, basically \u003ccode\u003e\"\u003c/code\u003e is prepended and appended to each\ncolumn. This will test the assumed most common case and fast path part of\ntrimming and unescaping in Sep. Sep is about 10x faster than CsvHelper for this.\nSylvan does not appear to have support automatic trimming and is, therefore, not\nincluded.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch6 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAMD.EPYC.7763 - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h6\u003e\u003ca id=\"user-content-amdepyc7763---packageassets-with-spaces-and-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: AMD.EPYC.7763 - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#amdepyc7763---packageassets-with-spaces-and-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.32 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3128.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e266.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.08 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Trim\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e26.13 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.96\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1595.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e522.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.11 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.02\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_TrimUnescape\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e19.37 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.45\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2151.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e387.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.11 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.03\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_TrimUnescapeTrim\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e21.30 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.60\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1956.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e426.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.11 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.03\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper_TrimUnescape\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e145.66 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e10.94\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e286.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2913.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e451.86 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e418.74\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper_TrimUnescapeTrim\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e143.79 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e10.80\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e289.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2875.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e446.2 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e413.49\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch6 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h6\u003e\u003ca id=\"user-content-amdryzen7pro7840uwradeon780m---packageassets-with-spaces-and-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#amdryzen7pro7840uwradeon780m---packageassets-with-spaces-and-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.52 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3089.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e270.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.22 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Trim\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e18.53 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.37\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2253.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e370.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.91 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.57\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_TrimUnescape\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e19.87 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.47\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2102.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e397.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.25 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.02\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_TrimUnescapeTrim\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e22.41 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.66\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1863.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e448.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.26 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.03\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper_TrimUnescape\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e129.55 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e9.58\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e322.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2591.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e451.52 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e369.89\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper_TrimUnescapeTrim\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e127.82 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e9.45\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e326.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2556.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e445.86 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e365.25\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch6 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAMD.Ryzen.9.5950X - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h6\u003e\u003ca id=\"user-content-amdryzen95950x---packageassets-with-spaces-and-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: AMD.Ryzen.9.5950X - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#amdryzen95950x---packageassets-with-spaces-and-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e9.467 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4412.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e189.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.05 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Trim\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e12.972 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.37\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3219.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e259.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.06 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.01\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_TrimUnescape\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.630 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.44\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3064.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e272.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.06 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.02\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_TrimUnescapeTrim\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e15.502 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.64\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2694.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e310.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.07 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.03\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper_TrimUnescape\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e98.444 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e10.40\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e424.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1968.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e451.52 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e431.70\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper_TrimUnescapeTrim\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e97.110 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e10.26\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e430.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1942.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e445.86 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e426.29\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch6 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eApple.M1.(Virtual) - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h6\u003e\u003ca id=\"user-content-applem1virtual---packageassets-with-spaces-and-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: Apple.M1.(Virtual) - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#applem1virtual---packageassets-with-spaces-and-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.51 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3085.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e270.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.1 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_Trim\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e16.78 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.24\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2484.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e335.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.03 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.94\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_TrimUnescape\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e17.90 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.33\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2327.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e358.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.37 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.25\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_TrimUnescapeTrim\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e21.65 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.60\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1924.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e433.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.37 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.25\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper_TrimUnescape\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e95.06 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.04\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e438.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1901.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e451.6 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e410.32\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper_TrimUnescapeTrim\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e50000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e93.41 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6.92\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41\u003c/td\u003e\n\u003ctd align=\"right\"\u003e446.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1868.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e445.93 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e405.18\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFloats Reader Comparison Benchmarks\u003c/h4\u003e\u003ca id=\"user-content-floats-reader-comparison-benchmarks\" class=\"anchor\" aria-label=\"Permalink: Floats Reader Comparison Benchmarks\" href=\"#floats-reader-comparison-benchmarks\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe \u003ca href=\"/nietras/Sep/blob/main/src/Sep.ComparisonBenchmarks/FloatsReaderBench.cs\"\u003eFloatsReaderBench.cs\u003c/a\u003e\nbenchmark demonstrates what Sep is built for. Namely parsing 32-bit floating\npoints or features as in machine learning. Here a simple CSV-file is randomly\ngenerated with \u003ccode\u003eN\u003c/code\u003e ground truth values, \u003ccode\u003eN\u003c/code\u003e predicted result values and nothing\nelse (note this was changed from version 0.3.0, prior to that there were some\nextra leading columns). \u003ccode\u003eN = 20\u003c/code\u003e\nhere. For example:\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"GT_Feature0;GT_Feature1;GT_Feature2;GT_Feature3;GT_Feature4;GT_Feature5;GT_Feature6;GT_Feature7;GT_Feature8;GT_Feature9;GT_Feature10;GT_Feature11;GT_Feature12;GT_Feature13;GT_Feature14;GT_Feature15;GT_Feature16;GT_Feature17;GT_Feature18;GT_Feature19;RE_Feature0;RE_Feature1;RE_Feature2;RE_Feature3;RE_Feature4;RE_Feature5;RE_Feature6;RE_Feature7;RE_Feature8;RE_Feature9;RE_Feature10;RE_Feature11;RE_Feature12;RE_Feature13;RE_Feature14;RE_Feature15;RE_Feature16;RE_Feature17;RE_Feature18;RE_Feature19\n0.52276427;0.16843422;0.26259267;0.7244084;0.51292276;0.17365117;0.76125056;0.23458846;0.2573214;0.50560355;0.3202332;0.3809696;0.26024464;0.5174511;0.035318818;0.8141374;0.57719684;0.3974705;0.15219308;0.09011261;0.70515215;0.81618196;0.5399706;0.044147138;0.7111546;0.14776127;0.90621275;0.6925897;0.5164137;0.18637845;0.041509967;0.30819967;0.5831603;0.8210651;0.003954861;0.535722;0.8051845;0.7483589;0.3845737;0.14911908\n0.6264564;0.11517637;0.24996082;0.77242833;0.2896067;0.6481459;0.14364648;0.044498358;0.6045593;0.51591337;0.050794687;0.42036617;0.7065823;0.6284636;0.21844554;0.013253775;0.36516154;0.2674384;0.06866083;0.71817476;0.07094294;0.46409357;0.012033525;0.7978093;0.43917948;0.5134962;0.4995968;0.008952909;0.82883793;0.012896823;0.0030740085;0.063773096;0.6541431;0.034539033;0.9135142;0.92897075;0.46119377;0.37533295;0.61660606;0.044443816\n0.7922863;0.5323656;0.400699;0.29737252;0.9072584;0.58673894;0.73510516;0.019412167;0.88168067;0.9576787;0.33283427;0.7107;0.1623628;0.10314285;0.4521515;0.33324885;0.7761104;0.14854911;0.13469358;0.21566042;0.59166247;0.5128394;0.98702157;0.766223;0.67204326;0.7149494;0.2894748;0.55206;0.9898286;0.65083236;0.02421702;0.34540752;0.92906284;0.027142895;0.21974725;0.26544374;0.03848049;0.2161237;0.59233844;0.42221397\n0.10609442;0.32130885;0.32383907;0.7511514;0.8258279;0.00904226;0.0420841;0.84049565;0.8958947;0.23807365;0.92621964;0.8452882;0.2794469;0.545344;0.63447595;0.62532926;0.19230893;0.29726416;0.18304513;0.029583583;0.23084833;0.93346167;0.98742676;0.78163713;0.13521992;0.8833956;0.18670778;0.29476836;0.5599867;0.5562107;0.7124796;0.121927656;0.5981778;0.39144602;0.88092715;0.4449142;0.34820423;0.96379805;0.46364686;0.54301775\"\u003e\u003cpre lang=\"text\" class=\"notranslate\"\u003e\u003ccode\u003eGT_Feature0;GT_Feature1;GT_Feature2;GT_Feature3;GT_Feature4;GT_Feature5;GT_Feature6;GT_Feature7;GT_Feature8;GT_Feature9;GT_Feature10;GT_Feature11;GT_Feature12;GT_Feature13;GT_Feature14;GT_Feature15;GT_Feature16;GT_Feature17;GT_Feature18;GT_Feature19;RE_Feature0;RE_Feature1;RE_Feature2;RE_Feature3;RE_Feature4;RE_Feature5;RE_Feature6;RE_Feature7;RE_Feature8;RE_Feature9;RE_Feature10;RE_Feature11;RE_Feature12;RE_Feature13;RE_Feature14;RE_Feature15;RE_Feature16;RE_Feature17;RE_Feature18;RE_Feature19\n0.52276427;0.16843422;0.26259267;0.7244084;0.51292276;0.17365117;0.76125056;0.23458846;0.2573214;0.50560355;0.3202332;0.3809696;0.26024464;0.5174511;0.035318818;0.8141374;0.57719684;0.3974705;0.15219308;0.09011261;0.70515215;0.81618196;0.5399706;0.044147138;0.7111546;0.14776127;0.90621275;0.6925897;0.5164137;0.18637845;0.041509967;0.30819967;0.5831603;0.8210651;0.003954861;0.535722;0.8051845;0.7483589;0.3845737;0.14911908\n0.6264564;0.11517637;0.24996082;0.77242833;0.2896067;0.6481459;0.14364648;0.044498358;0.6045593;0.51591337;0.050794687;0.42036617;0.7065823;0.6284636;0.21844554;0.013253775;0.36516154;0.2674384;0.06866083;0.71817476;0.07094294;0.46409357;0.012033525;0.7978093;0.43917948;0.5134962;0.4995968;0.008952909;0.82883793;0.012896823;0.0030740085;0.063773096;0.6541431;0.034539033;0.9135142;0.92897075;0.46119377;0.37533295;0.61660606;0.044443816\n0.7922863;0.5323656;0.400699;0.29737252;0.9072584;0.58673894;0.73510516;0.019412167;0.88168067;0.9576787;0.33283427;0.7107;0.1623628;0.10314285;0.4521515;0.33324885;0.7761104;0.14854911;0.13469358;0.21566042;0.59166247;0.5128394;0.98702157;0.766223;0.67204326;0.7149494;0.2894748;0.55206;0.9898286;0.65083236;0.02421702;0.34540752;0.92906284;0.027142895;0.21974725;0.26544374;0.03848049;0.2161237;0.59233844;0.42221397\n0.10609442;0.32130885;0.32383907;0.7511514;0.8258279;0.00904226;0.0420841;0.84049565;0.8958947;0.23807365;0.92621964;0.8452882;0.2794469;0.545344;0.63447595;0.62532926;0.19230893;0.29726416;0.18304513;0.029583583;0.23084833;0.93346167;0.98742676;0.78163713;0.13521992;0.8833956;0.18670778;0.29476836;0.5599867;0.5562107;0.7124796;0.121927656;0.5981778;0.39144602;0.88092715;0.4449142;0.34820423;0.96379805;0.46364686;0.54301775\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eFor \u003ccode\u003eScope=Floats\u003c/code\u003e the benchmark will parse the features as two spans of\n\u003ccode\u003efloat\u003c/code\u003es; one for ground truth values and one for predicted result values. Then\ncalculates the mean squared error (MSE) of those as an example. For Sep this\ncode is succinct and still incredibly efficient:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"using var reader = Sep.Reader().From(Reader.CreateReader());\n\nvar groundTruthColNames = reader.Header.NamesStartingWith(\u0026quot;GT_\u0026quot;);\nvar resultColNames = groundTruthColNames.Select(n =\u0026gt;\n n.Replace(\u0026quot;GT_\u0026quot;, \u0026quot;RE_\u0026quot;, StringComparison.Ordinal))\n .ToArray();\n\nvar sum = 0.0;\nvar count = 0;\nforeach (var row in reader)\n{\n var gts = row[groundTruthColNames].Parse\u0026lt;float\u0026gt;();\n var res = row[resultColNames].Parse\u0026lt;float\u0026gt;();\n\n sum += MeanSquaredError(gts, res);\n ++count;\n}\nreturn sum / count;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFrom\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eCreateReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003egroundTruthColNames\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eHeader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eNamesStartingWith\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"GT_\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eresultColNames\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003egroundTruthColNames\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eSelect\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003en \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReplace\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"GT_\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"RE_\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eStringComparison\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eOrdinal\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToArray\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esum\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0.0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecount\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003egts\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003egroundTruthColNames\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eParse\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003efloat\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eresultColNames\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eParse\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003efloat\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n \u003cspan class=\"pl-s1\"\u003esum\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eMeanSquaredError\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003egts\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecount\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esum\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e/\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecount\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eNote how one can access and parse multiple columns easily while there are no\nrepeated allocations for the parsed floating points. Sep internally handles a\npool of arrays for handling multiple columns and returns spans for them.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe benchmark is based on an assumption of accessing columns by name per\nrow. Ideally, one would look up the indices of the columns by name before\nenumerating rows, but this is a repeated nuisance to have to handle and Sep was\nbuilt to avoid this. Hence, the comparison is based on looking up by name for\neach, even if this ends up adding a bit more code in the benchmark for other\napproaches.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eAs can be seen below, the actual low level parsing of the separated values is a\ntiny part of the total runtime for Sep for which the runtime is dominated by\nparsing the floating points. Since Sep uses\n\u003ca href=\"https://github.com/CarlVerret/csFastFloat\"\u003ecsFastFloat\u003c/a\u003e for an integrated fast\nfloating point parser, it is \u003cstrong\u003e\u0026gt;2x faster than Sylvan\u003c/strong\u003e for example. If using\nSylvan one may consider using csFastFloat if that is an option. With the\nmulti-threaded (MT) \u003ccode\u003eParallelEnumerate\u003c/code\u003e implementation Sep is \u003cstrong\u003eup to 23x faster\nthan Sylvan\u003c/strong\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eCsvHelper suffers from the fact that one can only access the column as a string\nso this has to be allocated for each column (ReadLine by definition always\nallocates a string per column). Still CsvHelper is significantly slower than the\nnaive \u003ccode\u003eReadLine\u003c/code\u003e approach. With Sep being \u003cstrong\u003e\u0026gt;4x faster than CsvHelper\u003c/strong\u003e and \u003cstrong\u003eup to\n35x times faster when using \u003ccode\u003eParallelEnumerate\u003c/code\u003e\u003c/strong\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eNote that \u003ccode\u003eParallelEnumerate\u003c/code\u003e provides significant speedup over single-threaded\nparsing even though the source is only about 20 MB. This underlines how\nefficient \u003ccode\u003eParallelEnumerate\u003c/code\u003e is, but bear in mind that this is for the case of\nrepeated micro-benchmark runs.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eIt is a testament to how good the .NET and the .NET GC is that the ReadLine is\npretty good compared to CsvHelper regardless of allocating a lot of strings.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAMD.EPYC.7763 - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h5\u003e\u003ca id=\"user-content-amdepyc7763---floatsreader-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: AMD.EPYC.7763 - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#amdepyc7763---floatsreader-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.913 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6958.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e116.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.26 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.566 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.22\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e5685.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e142.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e10.71 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.51\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e18.192 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6.24\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1114.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e727.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e73489.7 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e58,426.60\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e38.233 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e13.12\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e530.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1529.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20.06 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e15.95\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.950 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e5131.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e158.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.26 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e5.911 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.50\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3429.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e236.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e10.72 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.48\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e19.574 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.96\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1035.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e783.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e73489.68 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e58,155.66\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e41.031 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e10.39\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e494.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1641.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e21340.29 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e16,887.53\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eFloats\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e31.469 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e644.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1258.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.08 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eFloats\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e12.639 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.40\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1604.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e505.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e67.81 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.40\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eFloats\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e84.199 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.68\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e240.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3368.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e19.89 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.46\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eFloats\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e112.934 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.59\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e179.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4517.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e73493.2 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e9,101.10\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eFloats\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e161.035 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e5.12\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e125.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6441.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e22062.53 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2,732.14\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAMD.Ryzen.7.PRO.7840U.w.Radeon.780M - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h5\u003e\u003ca id=\"user-content-amdryzen7pro7840uwradeon780m---floatsreader-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#amdryzen7pro7840uwradeon780m---floatsreader-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.415 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e5949.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e136.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.41 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.803 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.11\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e5343.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e152.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e10.71 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.59\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e15.853 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.64\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1281.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e634.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e73489.64 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e52,078.47\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e39.778 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e11.65\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e510.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1591.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20.03 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e14.19\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.470 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4546.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e178.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.42 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e5.999 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.34\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3387.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e239.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e10.71 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.54\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e17.779 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.98\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1142.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e711.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e73489.66 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e51,756.13\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e43.374 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e9.70\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e468.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1735.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e21340.41 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e15,029.29\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eFloats\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e32.146 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e632.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1285.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.2 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eFloats\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6.082 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.19\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3340.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e243.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e115.72 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e14.11\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eFloats\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e81.398 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.53\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e249.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3255.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e18.88 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.30\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eFloats\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e107.332 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.34\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e189.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4293.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e73493.12 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8,960.23\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eFloats\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e157.689 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.91\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e128.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6307.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e22062.72 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2,689.87\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAMD.Ryzen.9.5950X - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h5\u003e\u003ca id=\"user-content-amdryzen95950x---floatsreader-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: AMD.Ryzen.9.5950X - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#amdryzen95950x---floatsreader-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.013 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e10093.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e80.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.25 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.355 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.17\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8627.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e94.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e10.7 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.56\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e9.787 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.86\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2076.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e391.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e73489.63 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e58,791.71\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e25.143 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e12.49\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e808.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1005.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e16.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.666 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7622.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e106.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.25 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.702 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.39\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e5488.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e148.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e10.71 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.54\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e10.544 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.96\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1927.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e421.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e73489.63 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e58,654.23\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e27.442 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e10.29\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e740.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1097.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e21340.34 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e17,032.36\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eFloats\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20.297 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1001.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e811.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.97 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eFloats\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.780 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.19\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e5375.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e151.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e179.49 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e22.51\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eFloats\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e52.343 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.58\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e388.2\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2093.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e18.88 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.37\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eFloats\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e68.698 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.38\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e295.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2747.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e73493.12 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e9,215.89\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eFloats\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e100.913 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.97\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e201.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4036.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e22061.69 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2,766.49\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eApple.M1.(Virtual) - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\u003c/h5\u003e\u003ca id=\"user-content-applem1virtual---floatsreader-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\" class=\"anchor\" aria-label=\"Permalink: Apple.M1.(Virtual) - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)\" href=\"#applem1virtual---floatsreader-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eScope\u003c/th\u003e\n\u003cth\u003eRows\u003c/th\u003e\n\u003cth align=\"right\"\u003eMean\u003c/th\u003e\n\u003cth align=\"right\"\u003eRatio\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB\u003c/th\u003e\n\u003cth align=\"right\"\u003eMB/s\u003c/th\u003e\n\u003cth align=\"right\"\u003ens/row\u003c/th\u003e\n\u003cth align=\"right\"\u003eAllocated\u003c/th\u003e\n\u003cth align=\"right\"\u003eAlloc Ratio\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.209 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4815.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e168.4\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.2 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e19.401 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.61\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1044.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e776.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e10.62 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.87\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e15.132 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.60\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1339.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e605.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e73489.65 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e61,381.24\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eRow\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e30.200 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e7.18\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e671.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1208.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20.21 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e16.88\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e5.070 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3998.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e202.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.21 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e23.742 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.68\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e853.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e949.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e10.62 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.74\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e17.569 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.47\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1153.9\u003c/td\u003e\n\u003ctd align=\"right\"\u003e702.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e73489.65 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e60,493.09\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eCols\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e34.182 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e6.74\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e593.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1367.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e21340.43 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e17,566.40\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003ctd align=\"right\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep______\u003c/td\u003e\n\u003ctd\u003eFloats\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e27.363 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e740.8\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1094.5\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.08 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1.00\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSep_MT___\u003c/td\u003e\n\u003ctd\u003eFloats\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e12.814 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e0.47\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e1582.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e512.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e67.85 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e8.40\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSylvan___\u003c/td\u003e\n\u003ctd\u003eFloats\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e78.840 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.88\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e257.1\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3153.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e18.57 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2.30\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eReadLine_\u003c/td\u003e\n\u003ctd\u003eFloats\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e89.458 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3.27\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e226.6\u003c/td\u003e\n\u003ctd align=\"right\"\u003e3578.3\u003c/td\u003e\n\u003ctd align=\"right\"\u003e73493.2 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e9,093.41\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCsvHelper\u003c/td\u003e\n\u003ctd\u003eFloats\u003c/td\u003e\n\u003ctd\u003e25000\u003c/td\u003e\n\u003ctd align=\"right\"\u003e130.793 ms\u003c/td\u003e\n\u003ctd align=\"right\"\u003e4.78\u003c/td\u003e\n\u003ctd align=\"right\"\u003e20\u003c/td\u003e\n\u003ctd align=\"right\"\u003e155.0\u003c/td\u003e\n\u003ctd align=\"right\"\u003e5231.7\u003c/td\u003e\n\u003ctd align=\"right\"\u003e22061.99 KB\u003c/td\u003e\n\u003ctd align=\"right\"\u003e2,729.76\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eWriter Comparison Benchmarks\u003c/h3\u003e\u003ca id=\"user-content-writer-comparison-benchmarks\" class=\"anchor\" aria-label=\"Permalink: Writer Comparison Benchmarks\" href=\"#writer-comparison-benchmarks\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eWriter benchmarks are still pending, but Sep is unlikely to be the fastest here\nsince it is explicitly designed to make writing more convenient and flexible.\nStill efficient, but not necessarily fastest. That is, Sep does not require\nwriting header up front and hence having to keep header column order and row\nvalues column order the same. This means Sep does not write columns \u003cem\u003edirectly\u003c/em\u003e\nupon definition but defers this until a new row has been fully defined and then\nis ended.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eExample Catalogue\u003c/h2\u003e\u003ca id=\"user-content-example-catalogue\" class=\"anchor\" aria-label=\"Permalink: Example Catalogue\" href=\"#example-catalogue\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe following examples are available in \u003ca href=\"/nietras/Sep/blob/main/src/Sep.XyzTest/ReadMeTest.cs\"\u003eReadMeTest.cs\u003c/a\u003e.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eExample - Copy Rows\u003c/h3\u003e\u003ca id=\"user-content-example---copy-rows\" class=\"anchor\" aria-label=\"Permalink: Example - Copy Rows\" href=\"#example---copy-rows\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var text = \u0026quot;\u0026quot;\u0026quot;\n A;B;C;D;E;F\n Sep;🚀;1;1.2;0.1;0.5\n CSV;✅;2;2.2;0.2;1.5\n \n \u0026quot;\u0026quot;\u0026quot;; // Empty line at end is for line ending\n\nusing var reader = Sep.Reader().FromText(text);\nusing var writer = reader.Spec.Writer().ToText();\nforeach (var readRow in reader)\n{\n using var writeRow = writer.NewRow(readRow);\n}\nAssert.AreEqual(text, writer.ToString());\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e A;B;C;D;E;F\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Sep;🚀;1;1.2;0.1;0.5\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e CSV;✅;2;2.2;0.2;1.5\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// Empty line at end is for line ending\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriter\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSpec\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereadRow\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriteRow\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eNewRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ereadRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAreEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eExample - Copy Rows (Async)\u003c/h3\u003e\u003ca id=\"user-content-example---copy-rows-async\" class=\"anchor\" aria-label=\"Permalink: Example - Copy Rows (Async)\" href=\"#example---copy-rows-async\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var text = \u0026quot;\u0026quot;\u0026quot;\n A;B;C;D;E;F\n Sep;🚀;1;1.2;0.1;0.5\n CSV;✅;2;2.2;0.2;1.5\n \n \u0026quot;\u0026quot;\u0026quot;; // Empty line at end is for line ending\n\nusing var reader = await Sep.Reader().FromTextAsync(text);\nawait using var writer = reader.Spec.Writer().ToText();\nawait foreach (var readRow in reader)\n{\n await using var writeRow = writer.NewRow(readRow);\n}\nAssert.AreEqual(text, writer.ToString());\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e A;B;C;D;E;F\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Sep;🚀;1;1.2;0.1;0.5\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e CSV;✅;2;2.2;0.2;1.5\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// Empty line at end is for line ending\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromTextAsync\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriter\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSpec\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereadRow\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriteRow\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eNewRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ereadRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAreEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eExample - Skip Empty Rows\u003c/h3\u003e\u003ca id=\"user-content-example---skip-empty-rows\" class=\"anchor\" aria-label=\"Permalink: Example - Skip Empty Rows\" href=\"#example---skip-empty-rows\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var text = \u0026quot;\u0026quot;\u0026quot;\n A\n 1\n 2\n\n 3\n\n\n 4\n \n \u0026quot;\u0026quot;\u0026quot;; // Empty line at end is for line ending\nvar expected = new[] { 1, 2, 3, 4 };\n\n// Disable col count check to allow empty rows\nusing var reader = Sep.Reader(o =\u0026gt; o with { DisableColCountCheck = true }).FromText(text);\nvar actual = new List\u0026lt;int\u0026gt;();\nforeach (var row in reader)\n{\n // Skip empty row\n if (row.Span.Length == 0) { continue; }\n\n actual.Add(row[\u0026quot;A\u0026quot;].Parse\u0026lt;int\u0026gt;());\n}\nCollectionAssert.AreEqual(expected, actual);\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e A\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e 1\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e 2\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e 3\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e 4\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// Empty line at end is for line ending\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eexpected\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e// Disable col count check to allow empty rows\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003eo \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eo\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eDisableColCountCheck\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003etrue\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eactual\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eList\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e// Skip empty row\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSpan\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eLength\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003econtinue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n \u003cspan class=\"pl-s1\"\u003eactual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAdd\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"A\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eParse\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eCollectionAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAreEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eexpected\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eactual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eExample - Use Extension Method Enumerate within async/await Context (prior to C# 13.0)\u003c/h3\u003e\u003ca id=\"user-content-example---use-extension-method-enumerate-within-asyncawait-context-prior-to-c-130\" class=\"anchor\" aria-label=\"Permalink: Example - Use Extension Method Enumerate within async/await Context (prior to C# 13.0)\" href=\"#example---use-extension-method-enumerate-within-asyncawait-context-prior-to-c-130\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eSince \u003ccode\u003eSepReader.Row\u003c/code\u003e is a \u003ccode\u003eref struct\u003c/code\u003e as covered above, one has to avoid\nreferencing it directly in async context for C# prior to 13.0. This can be done\nin a number of ways, but one way is to use \u003ccode\u003eEnumerate\u003c/code\u003e extension method to\nparse/extract data from row like shown below.\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var text = \u0026quot;\u0026quot;\u0026quot;\n C\n 1\n 2\n \u0026quot;\u0026quot;\u0026quot;;\n\nusing var reader = Sep.Reader().FromText(text);\nvar squaredSum = 0;\n// Use Enumerate to avoid referencing SepReader.Row in async context\nforeach (var value in reader.Enumerate(row =\u0026gt; row[\u0026quot;C\u0026quot;].Parse\u0026lt;int\u0026gt;()))\n{\n squaredSum += await Task.Run(() =\u0026gt; value * value);\n}\nAssert.AreEqual(5, squaredSum);\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e C\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e 1\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e 2\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esquaredSum\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e// Use Enumerate to avoid referencing SepReader.Row in async context\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEnumerate\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003erow \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"C\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eParse\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003esquaredSum\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eTask\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eRun\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAreEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esquaredSum\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eExample - Use Local Function within async/await Context\u003c/h3\u003e\u003ca id=\"user-content-example---use-local-function-within-asyncawait-context\" class=\"anchor\" aria-label=\"Permalink: Example - Use Local Function within async/await Context\" href=\"#example---use-local-function-within-asyncawait-context\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eAnother way to avoid referencing \u003ccode\u003eSepReader.Row\u003c/code\u003e directly in async context is to\nuse custom iterator via \u003ccode\u003eyield return\u003c/code\u003e to parse/extract data from row like shown\nbelow.\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var text = \u0026quot;\u0026quot;\u0026quot;\n C\n 1\n 2\n \u0026quot;\u0026quot;\u0026quot;;\n\nusing var reader = Sep.Reader().FromText(text);\nvar squaredSum = 0;\n// Use custom local function Enumerate to avoid referencing\n// SepReader.Row in async context\nforeach (var value in Enumerate(reader))\n{\n squaredSum += await Task.Run(() =\u0026gt; value * value);\n}\nAssert.AreEqual(5, squaredSum);\n\nstatic IEnumerable\u0026lt;int\u0026gt; Enumerate(SepReader reader)\n{\n foreach (var r in reader) { yield return r[\u0026quot;C\u0026quot;].Parse\u0026lt;int\u0026gt;(); }\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e C\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e 1\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e 2\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFromText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esquaredSum\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e// Use custom local function Enumerate to avoid referencing\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e// SepReader.Row in async context\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eEnumerate\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003esquaredSum\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eTask\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eRun\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAreEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esquaredSum\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eIEnumerable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eEnumerate\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eSepReader\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003er\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eyield\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003er\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"C\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eParse\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eExample - Skip Lines/Rows Starting with Comment \u003ccode\u003e#\u003c/code\u003e\u003c/h3\u003e\u003ca id=\"user-content-example---skip-linesrows-starting-with-comment-\" class=\"anchor\" aria-label=\"Permalink: Example - Skip Lines/Rows Starting with Comment #\" href=\"#example---skip-linesrows-starting-with-comment-\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eBelow shows how one can skip lines starting with comment \u003ccode\u003e#\u003c/code\u003e since Sep does not\nhave built-in support for this. Note that this presumes lines to be skipped\nbefore header do not contain quotes or rather line endings within quotes as that\nis not handled by the \u003ccode\u003ePeek()\u003c/code\u003e skipping. The rows starting with comment \u003ccode\u003e#\u003c/code\u003e\nafter header are skipped if handling quoting is enabled in Sep options.\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var text = \u0026quot;\u0026quot;\u0026quot;\n # Comment 1\n # Comment 2\n A\n # Comment 3\n 1\n 2\n # Comment 4\n \u0026quot;\u0026quot;\u0026quot;;\n\nconst char Comment = '#';\n\nusing var textReader = new StringReader(text);\n// Skip initial lines (not rows) before header\nwhile (textReader.Peek() == Comment \u0026amp;\u0026amp;\n textReader.ReadLine() is string line) { }\n\nusing var reader = Sep.Reader().From(textReader);\nvar values = new List\u0026lt;int\u0026gt;();\nforeach (var row in reader)\n{\n // Skip rows starting with comment\n if (row.Span.StartsWith([Comment])) { continue; }\n\n var value = row[\u0026quot;A\u0026quot;].Parse\u0026lt;int\u0026gt;();\n values.Add(value);\n}\nCollectionAssert.AreEqual(new int[] { 1, 2 }, values);\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e # Comment 1\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e # Comment 2\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e A\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e # Comment 3\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e 1\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e 2\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e # Comment 4\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003econst\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003echar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eComment\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e'#'\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etextReader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eStringReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e// Skip initial lines (not rows) before header\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etextReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ePeek\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eComment\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003etextReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReadLine\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eis\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eline\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFrom\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etextReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalues\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eList\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eforeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e// Skip rows starting with comment\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSpan\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eStartsWith\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eComment\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003econtinue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"A\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eParse\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003evalues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAdd\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eCollectionAssert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAreEqual\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eRFC-4180\u003c/h2\u003e\u003ca id=\"user-content-rfc-4180\" class=\"anchor\" aria-label=\"Permalink: RFC-4180\" href=\"#rfc-4180\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eWhile the \u003ca href=\"https://www.ietf.org/rfc/rfc4180.txt\" rel=\"nofollow\"\u003eRFC-4180\u003c/a\u003e requires \u003ccode\u003e\\r\\n\u003c/code\u003e\n(CR,LF) as line ending, the well-known line endings (\u003ccode\u003e\\r\\n\u003c/code\u003e, \u003ccode\u003e\\n\u003c/code\u003e and \u003ccode\u003e\\r\u003c/code\u003e) are\nsupported similar to .NET. \u003ccode\u003eEnvironment.NewLine\u003c/code\u003e is used when writing. Quoting\nis supported by simply matching pairs of quotes, no matter what.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eNote that some libraries will claim conformance but the RFC is, perhaps\nnaturally, quite strict e.g. only comma is supported as separator/delimiter. Sep\ndefaults to using \u003ccode\u003e;\u003c/code\u003e as separator if writing, while auto-detecting supported\nseparators when reading. This is decidedly non-conforming.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe RFC defines the following condensed \u003ca href=\"https://en.wikipedia.org/wiki/Augmented_Backus%E2%80%93Naur_form\" rel=\"nofollow\"\u003eABNF\ngrammar\u003c/a\u003e:\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"file = [header CRLF] record *(CRLF record) [CRLF]\nheader = name *(COMMA name)\nrecord = field *(COMMA field)\nname = field\nfield = (escaped / non-escaped)\nescaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE\nnon-escaped = *TEXTDATA\nCOMMA = %x2C\nCR = %x0D ;as per section 6.1 of RFC 2234 [2]\nDQUOTE = %x22 ;as per section 6.1 of RFC 2234 [2]\nLF = %x0A ;as per section 6.1 of RFC 2234 [2]\nCRLF = CR LF ;as per section 6.1 of RFC 2234 [2]\nTEXTDATA = %x20-21 / %x23-2B / %x2D-7E\"\u003e\u003cpre lang=\"text\" class=\"notranslate\"\u003e\u003ccode\u003efile = [header CRLF] record *(CRLF record) [CRLF]\nheader = name *(COMMA name)\nrecord = field *(COMMA field)\nname = field\nfield = (escaped / non-escaped)\nescaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE\nnon-escaped = *TEXTDATA\nCOMMA = %x2C\nCR = %x0D ;as per section 6.1 of RFC 2234 [2]\nDQUOTE = %x22 ;as per section 6.1 of RFC 2234 [2]\nLF = %x0A ;as per section 6.1 of RFC 2234 [2]\nCRLF = CR LF ;as per section 6.1 of RFC 2234 [2]\nTEXTDATA = %x20-21 / %x23-2B / %x2D-7E\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eNote how \u003ccode\u003eTEXTDATA\u003c/code\u003e is restricted too, yet many will allow any character incl.\nemojis or similar (which Sep supports), but is not in conformance with the RFC.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eQuotes inside an escaped field e.g. \u003ccode\u003e\"fie\"\"ld\"\u003c/code\u003e are only allowed to be double\nquotes. Sep currently allows any pairs of quotes and quoting doesn't need to be\nat start of or end of field (col or column in Sep terminology).\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eAll in all Sep takes a pretty pragmatic approach here as the primary use case is\n\u003cstrong\u003enot\u003c/strong\u003e exchanging data on the internet, but for use in machine learning\npipelines or similar.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFrequently Asked Questions (FAQ)\u003c/h2\u003e\u003ca id=\"user-content-frequently-asked-questions-faq\" class=\"anchor\" aria-label=\"Permalink: Frequently Asked Questions (FAQ)\" href=\"#frequently-asked-questions-faq\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eAsk questions on GitHub and this section will be expanded. :)\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003cem\u003eDoes Sep support \u003ca href=\"https://joshclose.github.io/CsvHelper/examples/reading/get-class-records/\" rel=\"nofollow\"\u003eobject mapping like\nCsvHelper\u003c/a\u003e?\u003c/em\u003e\nNo, Sep is a minimal library and does not support object mapping. First, this\nis usually supported via reflection, which Sep avoids. Second, object mapping\noften only works well in a few cases without actually writing custom mapping\nfor each property, which then basically amounts to writing the parsing code\nyourself. If object mapping is a must have, consider writing your own \u003ca href=\"https://devblogs.microsoft.com/dotnet/new-c-source-generator-samples/\" rel=\"nofollow\"\u003esource\ngenerator\u003c/a\u003e\nfor it if you want to use Sep. Maybe some day Sep will have a built-in source\ngenerator, but not in the foreseeable future.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eSepReader FAQ\u003c/h3\u003e\u003ca id=\"user-content-sepreader-faq\" class=\"anchor\" aria-label=\"Permalink: SepReader FAQ\" href=\"#sepreader-faq\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eSepWriter FAQ\u003c/h3\u003e\u003ca id=\"user-content-sepwriter-faq\" class=\"anchor\" aria-label=\"Permalink: SepWriter FAQ\" href=\"#sepwriter-faq\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eLinks\u003c/h2\u003e\u003ca id=\"user-content-links\" class=\"anchor\" aria-label=\"Permalink: Links\" href=\"#links\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://www.meziantou.net/publishing-a-nuget-package-following-best-practices-using-github.htm\" rel=\"nofollow\"\u003ePublishing a NuGet package using GitHub and GitHub Actions\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ePublic API Reference\u003c/h2\u003e\u003ca id=\"user-content-public-api-reference\" class=\"anchor\" aria-label=\"Permalink: Public API Reference\" href=\"#public-api-reference\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"[assembly: System.CLSCompliant(false)]\n[assembly: System.Reflection.AssemblyMetadata(\u0026quot;IsTrimmable\u0026quot;, \u0026quot;True\u0026quot;)]\n[assembly: System.Reflection.AssemblyMetadata(\u0026quot;RepositoryUrl\u0026quot;, \u0026quot;https://github.com/nietras/Sep/\u0026quot;)]\n[assembly: System.Resources.NeutralResourcesLanguage(\u0026quot;en\u0026quot;)]\n[assembly: System.Runtime.CompilerServices.InternalsVisibleTo(\u0026quot;Sep.Benchmarks\u0026quot;)]\n[assembly: System.Runtime.CompilerServices.InternalsVisibleTo(\u0026quot;Sep.ComparisonBenchmarks\u0026quot;)]\n[assembly: System.Runtime.CompilerServices.InternalsVisibleTo(\u0026quot;Sep.Test\u0026quot;)]\n[assembly: System.Runtime.CompilerServices.InternalsVisibleTo(\u0026quot;Sep.XyzTest\u0026quot;)]\n[assembly: System.Runtime.Versioning.TargetFramework(\u0026quot;.NETCoreApp,Version=v9.0\u0026quot;, FrameworkDisplayName=\u0026quot;.NET 9.0\u0026quot;)]\nnamespace nietras.SeparatedValues\n{\n public readonly struct Sep : System.IEquatable\u0026lt;nietras.SeparatedValues.Sep\u0026gt;\n {\n public Sep() { }\n public Sep(char separator) { }\n public char Separator { get; init; }\n public static nietras.SeparatedValues.Sep? Auto { get; }\n public static nietras.SeparatedValues.Sep Default { get; }\n public static nietras.SeparatedValues.Sep New(char separator) { }\n public static nietras.SeparatedValues.SepReaderOptions Reader() { }\n public static nietras.SeparatedValues.SepReaderOptions Reader(System.Func\u0026lt;nietras.SeparatedValues.SepReaderOptions, nietras.SeparatedValues.SepReaderOptions\u0026gt; configure) { }\n public static nietras.SeparatedValues.SepWriterOptions Writer() { }\n public static nietras.SeparatedValues.SepWriterOptions Writer(System.Func\u0026lt;nietras.SeparatedValues.SepWriterOptions, nietras.SeparatedValues.SepWriterOptions\u0026gt; configure) { }\n }\n public enum SepColNotSetOption : byte\n {\n Throw = 0,\n Empty = 1,\n Skip = 2,\n }\n public delegate nietras.SeparatedValues.SepToString SepCreateToString(nietras.SeparatedValues.SepReaderHeader? maybeHeader, int colCount);\n public static class SepDefaults\n {\n public static System.StringComparer ColNameComparer { get; }\n public static System.Globalization.CultureInfo CultureInfo { get; }\n public static char Separator { get; }\n }\n [System.Diagnostics.DebuggerDisplay(\u0026quot;{DebuggerDisplay,nq}\u0026quot;)]\n public sealed class SepReader : nietras.SeparatedValues.SepReaderState, System.Collections.Generic.IAsyncEnumerable\u0026lt;nietras.SeparatedValues.SepReader.Row\u0026gt;, System.Collections.Generic.IEnumerable\u0026lt;nietras.SeparatedValues.SepReader.Row\u0026gt;, System.Collections.Generic.IEnumerator\u0026lt;nietras.SeparatedValues.SepReader.Row\u0026gt;, System.Collections.IEnumerable, System.Collections.IEnumerator, System.IDisposable\n {\n public nietras.SeparatedValues.SepReader.Row Current { get; }\n public bool HasHeader { get; }\n public bool HasRows { get; }\n public nietras.SeparatedValues.SepReaderHeader Header { get; }\n public bool IsEmpty { get; }\n public nietras.SeparatedValues.SepSpec Spec { get; }\n public nietras.SeparatedValues.SepReader.AsyncEnumerator GetAsyncEnumerator(System.Threading.CancellationToken cancellationToken = default) { }\n public nietras.SeparatedValues.SepReader GetEnumerator() { }\n public bool MoveNext() { }\n public System.Threading.Tasks.ValueTask\u0026lt;bool\u0026gt; MoveNextAsync(System.Threading.CancellationToken cancellationToken = default) { }\n public string ToString(int index) { }\n public readonly struct AsyncEnumerator : System.Collections.Generic.IAsyncEnumerator\u0026lt;nietras.SeparatedValues.SepReader.Row\u0026gt;, System.IAsyncDisposable\n {\n public nietras.SeparatedValues.SepReader.Row Current { get; }\n public System.Threading.Tasks.ValueTask DisposeAsync() { }\n public System.Threading.Tasks.ValueTask\u0026lt;bool\u0026gt; MoveNextAsync() { }\n }\n [System.Diagnostics.DebuggerDisplay(\u0026quot;{DebuggerDisplay}\u0026quot;)]\n public readonly ref struct Col\n {\n public System.ReadOnlySpan\u0026lt;char\u0026gt; Span { get; }\n public T Parse\u0026lt;T\u0026gt;()\n where T : System.ISpanParsable\u0026lt;T\u0026gt; { }\n public override string ToString() { }\n public T? TryParse\u0026lt;T\u0026gt;()\n where T : struct, System.ISpanParsable\u0026lt;T\u0026gt; { }\n public bool TryParse\u0026lt;T\u0026gt;(out T value)\n where T : System.ISpanParsable\u0026lt;T\u0026gt; { }\n }\n public readonly ref struct Cols\n {\n public int Count { get; }\n public nietras.SeparatedValues.SepReader.Col this[int index] { get; }\n public string CombinePathsToString() { }\n public System.ReadOnlySpan\u0026lt;char\u0026gt; Join(System.ReadOnlySpan\u0026lt;char\u0026gt; separator) { }\n public string JoinPathsToString() { }\n public string JoinToString(System.ReadOnlySpan\u0026lt;char\u0026gt; separator) { }\n public System.Span\u0026lt;T\u0026gt; Parse\u0026lt;T\u0026gt;()\n where T : System.ISpanParsable\u0026lt;T\u0026gt; { }\n public void Parse\u0026lt;T\u0026gt;(System.Span\u0026lt;T\u0026gt; span)\n where T : System.ISpanParsable\u0026lt;T\u0026gt; { }\n public T[] ParseToArray\u0026lt;T\u0026gt;()\n where T : System.ISpanParsable\u0026lt;T\u0026gt; { }\n public System.Span\u0026lt;T\u0026gt; Select\u0026lt;T\u0026gt;(method selector) { }\n public System.Span\u0026lt;T\u0026gt; Select\u0026lt;T\u0026gt;(nietras.SeparatedValues.SepReader.ColFunc\u0026lt;T\u0026gt; selector) { }\n public System.Span\u0026lt;string\u0026gt; ToStrings() { }\n public string[] ToStringsArray() { }\n public System.Span\u0026lt;T?\u0026gt; TryParse\u0026lt;T\u0026gt;()\n where T : struct, System.ISpanParsable\u0026lt;T\u0026gt; { }\n public void TryParse\u0026lt;T\u0026gt;(System.Span\u0026lt;T?\u0026gt; span)\n where T : struct, System.ISpanParsable\u0026lt;T\u0026gt; { }\n }\n [System.Diagnostics.DebuggerDisplay(\u0026quot;{DebuggerDisplayPrefix,nq}{Span}\u0026quot;)]\n [System.Diagnostics.DebuggerTypeProxy(typeof(nietras.SeparatedValues.SepReader.Row.DebugView))]\n public readonly ref struct Row\n {\n public int ColCount { get; }\n public nietras.SeparatedValues.SepReader.Col this[int index] { get; }\n public nietras.SeparatedValues.SepReader.Col this[System.Index index] { get; }\n public nietras.SeparatedValues.SepReader.Col this[string colName] { get; }\n public nietras.SeparatedValues.SepReader.Cols this[System.Range range] { get; }\n public nietras.SeparatedValues.SepReader.Cols this[System.ReadOnlySpan\u0026lt;int\u0026gt; indices] { get; }\n public nietras.SeparatedValues.SepReader.Cols this[System.Collections.Generic.IReadOnlyList\u0026lt;int\u0026gt; indices] { get; }\n public nietras.SeparatedValues.SepReader.Cols this[int[] indices] { get; }\n public nietras.SeparatedValues.SepReader.Cols this[System.ReadOnlySpan\u0026lt;string\u0026gt; colNames] { get; }\n public nietras.SeparatedValues.SepReader.Cols this[System.Collections.Generic.IReadOnlyList\u0026lt;string\u0026gt; colNames] { get; }\n public nietras.SeparatedValues.SepReader.Cols this[string[] colNames] { get; }\n public int LineNumberFrom { get; }\n public int LineNumberToExcl { get; }\n public int RowIndex { get; }\n public System.ReadOnlySpan\u0026lt;char\u0026gt; Span { get; }\n public System.Func\u0026lt;int, string\u0026gt; UnsafeToStringDelegate { get; }\n public override string ToString() { }\n }\n public delegate void ColAction(nietras.SeparatedValues.SepReader.Col col);\n public delegate T ColFunc\u0026lt;T\u0026gt;(nietras.SeparatedValues.SepReader.Col col);\n public delegate void ColsAction(nietras.SeparatedValues.SepReader.Cols col);\n public delegate void RowAction(nietras.SeparatedValues.SepReader.Row row);\n public delegate T RowFunc\u0026lt;T\u0026gt;(nietras.SeparatedValues.SepReader.Row row);\n public delegate bool RowTryFunc\u0026lt;T\u0026gt;(nietras.SeparatedValues.SepReader.Row row, out T value);\n }\n public static class SepReaderExtensions\n {\n public static System.Collections.Generic.IEnumerable\u0026lt;T\u0026gt; Enumerate\u0026lt;T\u0026gt;(this nietras.SeparatedValues.SepReader reader, nietras.SeparatedValues.SepReader.RowFunc\u0026lt;T\u0026gt; select) { }\n public static System.Collections.Generic.IEnumerable\u0026lt;T\u0026gt; Enumerate\u0026lt;T\u0026gt;(this nietras.SeparatedValues.SepReader reader, nietras.SeparatedValues.SepReader.RowTryFunc\u0026lt;T\u0026gt; trySelect) { }\n public static System.Collections.Generic.IAsyncEnumerable\u0026lt;T\u0026gt; EnumerateAsync\u0026lt;T\u0026gt;(this nietras.SeparatedValues.SepReader reader, nietras.SeparatedValues.SepReader.RowFunc\u0026lt;T\u0026gt; select) { }\n public static System.Collections.Generic.IAsyncEnumerable\u0026lt;T\u0026gt; EnumerateAsync\u0026lt;T\u0026gt;(this nietras.SeparatedValues.SepReader reader, nietras.SeparatedValues.SepReader.RowTryFunc\u0026lt;T\u0026gt; trySelect) { }\n public static nietras.SeparatedValues.SepReader From(in this nietras.SeparatedValues.SepReaderOptions options, byte[] buffer) { }\n public static nietras.SeparatedValues.SepReader From(in this nietras.SeparatedValues.SepReaderOptions options, System.IO.Stream stream) { }\n public static nietras.SeparatedValues.SepReader From(in this nietras.SeparatedValues.SepReaderOptions options, System.IO.TextReader reader) { }\n public static nietras.SeparatedValues.SepReader From(in this nietras.SeparatedValues.SepReaderOptions options, string name, System.Func\u0026lt;string, System.IO.Stream\u0026gt; nameToStream) { }\n public static nietras.SeparatedValues.SepReader From(in this nietras.SeparatedValues.SepReaderOptions options, string name, System.Func\u0026lt;string, System.IO.TextReader\u0026gt; nameToReader) { }\n public static System.Threading.Tasks.ValueTask\u0026lt;nietras.SeparatedValues.SepReader\u0026gt; FromAsync(this nietras.SeparatedValues.SepReaderOptions options, byte[] buffer, System.Threading.CancellationToken cancellationToken = default) { }\n public static System.Threading.Tasks.ValueTask\u0026lt;nietras.SeparatedValues.SepReader\u0026gt; FromAsync(this nietras.SeparatedValues.SepReaderOptions options, System.IO.Stream stream, System.Threading.CancellationToken cancellationToken = default) { }\n public static System.Threading.Tasks.ValueTask\u0026lt;nietras.SeparatedValues.SepReader\u0026gt; FromAsync(this nietras.SeparatedValues.SepReaderOptions options, System.IO.TextReader reader, System.Threading.CancellationToken cancellationToken = default) { }\n public static System.Threading.Tasks.ValueTask\u0026lt;nietras.SeparatedValues.SepReader\u0026gt; FromAsync(this nietras.SeparatedValues.SepReaderOptions options, string name, System.Func\u0026lt;string, System.IO.Stream\u0026gt; nameToStream, System.Threading.CancellationToken cancellationToken = default) { }\n public static System.Threading.Tasks.ValueTask\u0026lt;nietras.SeparatedValues.SepReader\u0026gt; FromAsync(this nietras.SeparatedValues.SepReaderOptions options, string name, System.Func\u0026lt;string, System.IO.TextReader\u0026gt; nameToReader, System.Threading.CancellationToken cancellationToken = default) { }\n public static nietras.SeparatedValues.SepReader FromFile(in this nietras.SeparatedValues.SepReaderOptions options, string filePath) { }\n public static System.Threading.Tasks.ValueTask\u0026lt;nietras.SeparatedValues.SepReader\u0026gt; FromFileAsync(this nietras.SeparatedValues.SepReaderOptions options, string filePath, System.Threading.CancellationToken cancellationToken = default) { }\n public static nietras.SeparatedValues.SepReader FromText(in this nietras.SeparatedValues.SepReaderOptions options, string text) { }\n public static System.Threading.Tasks.ValueTask\u0026lt;nietras.SeparatedValues.SepReader\u0026gt; FromTextAsync(this nietras.SeparatedValues.SepReaderOptions options, string text, System.Threading.CancellationToken cancellationToken = default) { }\n public static System.Collections.Generic.IEnumerable\u0026lt;T\u0026gt; ParallelEnumerate\u0026lt;T\u0026gt;(this nietras.SeparatedValues.SepReader reader, nietras.SeparatedValues.SepReader.RowFunc\u0026lt;T\u0026gt; select) { }\n public static System.Collections.Generic.IEnumerable\u0026lt;T\u0026gt; ParallelEnumerate\u0026lt;T\u0026gt;(this nietras.SeparatedValues.SepReader reader, nietras.SeparatedValues.SepReader.RowTryFunc\u0026lt;T\u0026gt; trySelect) { }\n public static System.Collections.Generic.IEnumerable\u0026lt;T\u0026gt; ParallelEnumerate\u0026lt;T\u0026gt;(this nietras.SeparatedValues.SepReader reader, nietras.SeparatedValues.SepReader.RowFunc\u0026lt;T\u0026gt; select, int degreeOfParallism) { }\n public static System.Collections.Generic.IEnumerable\u0026lt;T\u0026gt; ParallelEnumerate\u0026lt;T\u0026gt;(this nietras.SeparatedValues.SepReader reader, nietras.SeparatedValues.SepReader.RowTryFunc\u0026lt;T\u0026gt; trySelect, int degreeOfParallism) { }\n public static nietras.SeparatedValues.SepReaderOptions Reader(this nietras.SeparatedValues.Sep sep) { }\n public static nietras.SeparatedValues.SepReaderOptions Reader(this nietras.SeparatedValues.Sep? sep) { }\n public static nietras.SeparatedValues.SepReaderOptions Reader(this nietras.SeparatedValues.SepSpec spec) { }\n public static nietras.SeparatedValues.SepReaderOptions Reader(this nietras.SeparatedValues.Sep sep, System.Func\u0026lt;nietras.SeparatedValues.SepReaderOptions, nietras.SeparatedValues.SepReaderOptions\u0026gt; configure) { }\n public static nietras.SeparatedValues.SepReaderOptions Reader(this nietras.SeparatedValues.Sep? sep, System.Func\u0026lt;nietras.SeparatedValues.SepReaderOptions, nietras.SeparatedValues.SepReaderOptions\u0026gt; configure) { }\n public static nietras.SeparatedValues.SepReaderOptions Reader(this nietras.SeparatedValues.SepSpec spec, System.Func\u0026lt;nietras.SeparatedValues.SepReaderOptions, nietras.SeparatedValues.SepReaderOptions\u0026gt; configure) { }\n }\n public sealed class SepReaderHeader\n {\n public System.Collections.Generic.IReadOnlyList\u0026lt;string\u0026gt; ColNames { get; }\n public bool IsEmpty { get; }\n public static nietras.SeparatedValues.SepReaderHeader Empty { get; }\n public int IndexOf(System.ReadOnlySpan\u0026lt;char\u0026gt; colName) { }\n public int IndexOf(string colName) { }\n public int[] IndicesOf(System.Collections.Generic.IReadOnlyList\u0026lt;string\u0026gt; colNames) { }\n public int[] IndicesOf([System.Runtime.CompilerServices.ParamCollection] [System.Runtime.CompilerServices.ScopedRef] System.ReadOnlySpan\u0026lt;string\u0026gt; colNames) { }\n public int[] IndicesOf(params string[] colNames) { }\n public void IndicesOf(System.ReadOnlySpan\u0026lt;string\u0026gt; colNames, System.Span\u0026lt;int\u0026gt; colIndices) { }\n public System.Collections.Generic.IReadOnlyList\u0026lt;string\u0026gt; NamesStartingWith(string prefix, System.StringComparison comparison = 4) { }\n public override string ToString() { }\n public bool TryIndexOf(System.ReadOnlySpan\u0026lt;char\u0026gt; colName, out int colIndex) { }\n public bool TryIndexOf(string colName, out int colIndex) { }\n }\n public readonly struct SepReaderOptions : System.IEquatable\u0026lt;nietras.SeparatedValues.SepReaderOptions\u0026gt;\n {\n public SepReaderOptions() { }\n public SepReaderOptions(nietras.SeparatedValues.Sep? sep) { }\n public bool AsyncContinueOnCapturedContext { get; init; }\n public System.Collections.Generic.IEqualityComparer\u0026lt;string\u0026gt; ColNameComparer { get; init; }\n public nietras.SeparatedValues.SepCreateToString CreateToString { get; init; }\n public System.Globalization.CultureInfo? CultureInfo { get; init; }\n public bool DisableColCountCheck { get; init; }\n public bool DisableFastFloat { get; init; }\n public bool DisableQuotesParsing { get; init; }\n public bool HasHeader { get; init; }\n public int InitialBufferLength { get; init; }\n public nietras.SeparatedValues.Sep? Sep { get; init; }\n public nietras.SeparatedValues.SepTrim Trim { get; init; }\n public bool Unescape { get; init; }\n }\n public class SepReaderState : System.IDisposable\n {\n public void Dispose() { }\n }\n public static class SepReaderWriterExtensions\n {\n public static void CopyTo(this nietras.SeparatedValues.SepReader.Row readerRow, nietras.SeparatedValues.SepWriter.Row writerRow) { }\n public static nietras.SeparatedValues.SepWriter.Row NewRow(this nietras.SeparatedValues.SepWriter writer, nietras.SeparatedValues.SepReader.Row rowToCopy) { }\n public static nietras.SeparatedValues.SepWriter.Row NewRow(this nietras.SeparatedValues.SepWriter writer, nietras.SeparatedValues.SepReader.Row rowToCopy, System.Threading.CancellationToken cancellationToken) { }\n }\n public readonly struct SepSpec : System.IEquatable\u0026lt;nietras.SeparatedValues.SepSpec\u0026gt;\n {\n public SepSpec() { }\n public SepSpec(nietras.SeparatedValues.Sep sep, System.Globalization.CultureInfo? cultureInfo) { }\n public SepSpec(nietras.SeparatedValues.Sep sep, System.Globalization.CultureInfo? cultureInfo, bool asyncContinueOnCapturedContext) { }\n public bool AsyncContinueOnCapturedContext { get; init; }\n public System.Globalization.CultureInfo? CultureInfo { get; init; }\n public nietras.SeparatedValues.Sep Sep { get; init; }\n }\n public abstract class SepToString : System.IDisposable\n {\n protected SepToString() { }\n public virtual bool IsThreadSafe { get; }\n public static nietras.SeparatedValues.SepCreateToString Direct { get; }\n public void Dispose() { }\n protected virtual void Dispose(bool disposing) { }\n public abstract string ToString(System.ReadOnlySpan\u0026lt;char\u0026gt; colSpan, int colIndex);\n public static nietras.SeparatedValues.SepCreateToString OnePool(int maximumStringLength = 32, int initialCapacity = 64, int maximumCapacity = 4096) { }\n public static nietras.SeparatedValues.SepCreateToString PoolPerCol(int maximumStringLength = 32, int initialCapacity = 64, int maximumCapacity = 4096) { }\n public static nietras.SeparatedValues.SepCreateToString PoolPerColThreadSafe(int maximumStringLength = 32, int initialCapacity = 64, int maximumCapacity = 4096) { }\n public static nietras.SeparatedValues.SepCreateToString PoolPerColThreadSafeFixedCapacity(int maximumStringLength = 32, int capacity = 2048) { }\n }\n [System.Flags]\n public enum SepTrim : byte\n {\n None = 0,\n Outer = 1,\n AfterUnescape = 2,\n All = 3,\n }\n [System.Diagnostics.DebuggerDisplay(\u0026quot;{DebuggerDisplay,nq}\u0026quot;)]\n public sealed class SepWriter : System.IAsyncDisposable, System.IDisposable\n {\n public nietras.SeparatedValues.SepWriterHeader Header { get; }\n public nietras.SeparatedValues.SepSpec Spec { get; }\n public void Dispose() { }\n public System.Threading.Tasks.ValueTask DisposeAsync() { }\n public void Flush() { }\n public System.Threading.Tasks.Task FlushAsync(System.Threading.CancellationToken cancellationToken = default) { }\n public nietras.SeparatedValues.SepWriter.Row NewRow() { }\n public nietras.SeparatedValues.SepWriter.Row NewRow(System.Threading.CancellationToken cancellationToken) { }\n public override string ToString() { }\n public readonly ref struct Col\n {\n public void Format\u0026lt;T\u0026gt;(T value)\n where T : System.ISpanFormattable { }\n public void Set(System.ReadOnlySpan\u0026lt;char\u0026gt; span) { }\n public void Set([System.Runtime.CompilerServices.InterpolatedStringHandlerArgument(\u0026quot;\u0026quot;)] ref nietras.SeparatedValues.SepWriter.Col.FormatInterpolatedStringHandler handler) { }\n public void Set(System.IFormatProvider? provider, [System.Runtime.CompilerServices.InterpolatedStringHandlerArgument(new string?[]?[] {\n \u0026quot;\u0026quot;,\n \u0026quot;provider\u0026quot;})] ref nietras.SeparatedValues.SepWriter.Col.FormatInterpolatedStringHandler handler) { }\n [System.Runtime.CompilerServices.InterpolatedStringHandler]\n public ref struct FormatInterpolatedStringHandler\n {\n public FormatInterpolatedStringHandler(int literalLength, int formattedCount, nietras.SeparatedValues.SepWriter.Col col) { }\n public FormatInterpolatedStringHandler(int literalLength, int formattedCount, nietras.SeparatedValues.SepWriter.Col col, System.IFormatProvider? provider) { }\n public void AppendFormatted(System.ReadOnlySpan\u0026lt;char\u0026gt; value) { }\n public void AppendFormatted(string? value) { }\n public void AppendFormatted(System.ReadOnlySpan\u0026lt;char\u0026gt; value, int alignment = 0, string? format = null) { }\n public void AppendFormatted(object? value, int alignment = 0, string? format = null) { }\n public void AppendFormatted(string? value, int alignment = 0, string? format = null) { }\n public void AppendFormatted\u0026lt;T\u0026gt;(T value) { }\n public void AppendFormatted\u0026lt;T\u0026gt;(T value, int alignment) { }\n public void AppendFormatted\u0026lt;T\u0026gt;(T value, string? format) { }\n public void AppendFormatted\u0026lt;T\u0026gt;(T value, int alignment, string? format) { }\n public void AppendLiteral(string value) { }\n }\n }\n public readonly ref struct Cols\n {\n public int Count { get; }\n public nietras.SeparatedValues.SepWriter.Col this[int colIndex] { get; }\n public void Format\u0026lt;T\u0026gt;(System.Collections.Generic.IReadOnlyList\u0026lt;T\u0026gt; values)\n where T : System.ISpanFormattable { }\n public void Format\u0026lt;T\u0026gt;([System.Runtime.CompilerServices.ParamCollection] [System.Runtime.CompilerServices.ScopedRef] System.ReadOnlySpan\u0026lt;T\u0026gt; values)\n where T : System.ISpanFormattable { }\n public void Format\u0026lt;T\u0026gt;(System.Span\u0026lt;T\u0026gt; values)\n where T : System.ISpanFormattable { }\n public void Format\u0026lt;T\u0026gt;(T[] values)\n where T : System.ISpanFormattable { }\n public void Format\u0026lt;T\u0026gt;(System.ReadOnlySpan\u0026lt;T\u0026gt; values, nietras.SeparatedValues.SepWriter.ColAction\u0026lt;T\u0026gt; format) { }\n public void Set(System.Collections.Generic.IReadOnlyList\u0026lt;string\u0026gt; values) { }\n public void Set([System.Runtime.CompilerServices.ParamCollection] [System.Runtime.CompilerServices.ScopedRef] System.ReadOnlySpan\u0026lt;string\u0026gt; values) { }\n public void Set(string[] values) { }\n public void Set(nietras.SeparatedValues.SepReader.Cols cols) { }\n }\n public ref struct Row : System.IAsyncDisposable, System.IDisposable\n {\n public nietras.SeparatedValues.SepWriter.Col this[int colIndex] { get; }\n public nietras.SeparatedValues.SepWriter.Col this[string colName] { get; }\n public nietras.SeparatedValues.SepWriter.Cols this[System.ReadOnlySpan\u0026lt;int\u0026gt; indices] { get; }\n public nietras.SeparatedValues.SepWriter.Cols this[System.ReadOnlySpan\u0026lt;string\u0026gt; colNames] { get; }\n public nietras.SeparatedValues.SepWriter.Cols this[System.Collections.Generic.IReadOnlyList\u0026lt;string\u0026gt; colNames] { get; }\n public nietras.SeparatedValues.SepWriter.Cols this[string[] colNames] { get; }\n public void Dispose() { }\n public System.Threading.Tasks.ValueTask DisposeAsync() { }\n }\n public delegate void ColAction(nietras.SeparatedValues.SepWriter.Col col);\n public delegate void ColAction\u0026lt;T\u0026gt;(nietras.SeparatedValues.SepWriter.Col col, T value);\n public delegate void RowAction(nietras.SeparatedValues.SepWriter.Row row);\n }\n public static class SepWriterExtensions\n {\n public static nietras.SeparatedValues.SepWriter To(in this nietras.SeparatedValues.SepWriterOptions options, System.IO.Stream stream) { }\n public static nietras.SeparatedValues.SepWriter To(in this nietras.SeparatedValues.SepWriterOptions options, System.IO.TextWriter writer) { }\n public static nietras.SeparatedValues.SepWriter To(in this nietras.SeparatedValues.SepWriterOptions options, System.Text.StringBuilder stringBuilder) { }\n public static nietras.SeparatedValues.SepWriter To(in this nietras.SeparatedValues.SepWriterOptions options, System.IO.Stream stream, bool leaveOpen) { }\n public static nietras.SeparatedValues.SepWriter To(in this nietras.SeparatedValues.SepWriterOptions options, System.IO.TextWriter writer, bool leaveOpen) { }\n public static nietras.SeparatedValues.SepWriter To(in this nietras.SeparatedValues.SepWriterOptions options, string name, System.Func\u0026lt;string, System.IO.Stream\u0026gt; nameToStream, bool leaveOpen = false) { }\n public static nietras.SeparatedValues.SepWriter To(in this nietras.SeparatedValues.SepWriterOptions options, string name, System.Func\u0026lt;string, System.IO.TextWriter\u0026gt; nameToWriter, bool leaveOpen = false) { }\n public static nietras.SeparatedValues.SepWriter ToFile(in this nietras.SeparatedValues.SepWriterOptions options, string filePath) { }\n public static nietras.SeparatedValues.SepWriter ToText(in this nietras.SeparatedValues.SepWriterOptions options) { }\n public static nietras.SeparatedValues.SepWriter ToText(in this nietras.SeparatedValues.SepWriterOptions options, int capacity) { }\n public static nietras.SeparatedValues.SepWriterOptions Writer(this nietras.SeparatedValues.Sep sep) { }\n public static nietras.SeparatedValues.SepWriterOptions Writer(this nietras.SeparatedValues.SepSpec spec) { }\n public static nietras.SeparatedValues.SepWriterOptions Writer(this nietras.SeparatedValues.Sep sep, System.Func\u0026lt;nietras.SeparatedValues.SepWriterOptions, nietras.SeparatedValues.SepWriterOptions\u0026gt; configure) { }\n public static nietras.SeparatedValues.SepWriterOptions Writer(this nietras.SeparatedValues.SepSpec spec, System.Func\u0026lt;nietras.SeparatedValues.SepWriterOptions, nietras.SeparatedValues.SepWriterOptions\u0026gt; configure) { }\n }\n [System.Diagnostics.DebuggerDisplay(\u0026quot;{DebuggerDisplay,nq}\u0026quot;)]\n [System.Diagnostics.DebuggerTypeProxy(typeof(nietras.SeparatedValues.SepWriterHeader.DebugView))]\n public sealed class SepWriterHeader\n {\n public void Add(System.Collections.Generic.IReadOnlyList\u0026lt;string\u0026gt; colNames) { }\n public void Add([System.Runtime.CompilerServices.ParamCollection] [System.Runtime.CompilerServices.ScopedRef] System.ReadOnlySpan\u0026lt;string\u0026gt; colNames) { }\n public void Add(string colName) { }\n public void Add(string[] colNames) { }\n public void Write() { }\n public System.Threading.Tasks.ValueTask WriteAsync(System.Threading.CancellationToken cancellationToken = default) { }\n }\n public readonly struct SepWriterOptions : System.IEquatable\u0026lt;nietras.SeparatedValues.SepWriterOptions\u0026gt;\n {\n public SepWriterOptions() { }\n public SepWriterOptions(nietras.SeparatedValues.Sep sep) { }\n public bool AsyncContinueOnCapturedContext { get; init; }\n public nietras.SeparatedValues.SepColNotSetOption ColNotSetOption { get; init; }\n public System.Globalization.CultureInfo? CultureInfo { get; init; }\n public bool DisableColCountCheck { get; init; }\n public bool Escape { get; init; }\n public nietras.SeparatedValues.Sep Sep { get; init; }\n public bool WriteHeader { get; init; }\n }\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003eassembly\u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCLSCompliant\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003efalse\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003eassembly\u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eReflection\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eAssemblyMetadata\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"IsTrimmable\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"True\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003eassembly\u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eReflection\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eAssemblyMetadata\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"RepositoryUrl\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"https://github.com/nietras/Sep/\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003eassembly\u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eResources\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eNeutralResourcesLanguage\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"en\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003eassembly\u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRuntime\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCompilerServices\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eInternalsVisibleTo\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Sep.Benchmarks\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003eassembly\u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRuntime\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCompilerServices\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eInternalsVisibleTo\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Sep.ComparisonBenchmarks\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003eassembly\u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRuntime\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCompilerServices\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eInternalsVisibleTo\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Sep.Test\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003eassembly\u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRuntime\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCompilerServices\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eInternalsVisibleTo\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Sep.XyzTest\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003eassembly\u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRuntime\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eVersioning\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTargetFramework\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\".NETCoreApp,Version=v9.0\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eFrameworkDisplayName\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\".NET 9.0\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003enamespace\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereadonly\u003c/span\u003e \u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSep\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIEquatable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003echar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eseparator\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003echar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSeparator\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eAuto\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eDefault\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eNew\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003echar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eseparator\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003econfigure\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterOptions\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterOptions\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterOptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterOptions\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003econfigure\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eenum\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSepColNotSetOption\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebyte\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-c1\"\u003eThrow\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-c1\"\u003eEmpty\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-c1\"\u003eSkip\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edelegate\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepToString\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSepCreateToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderHeader\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003emaybeHeader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolCount\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSepDefaults\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eStringComparer\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eColNameComparer\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGlobalization\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCultureInfo\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eCultureInfo\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003echar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSeparator\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDiagnostics\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDebuggerDisplay\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"{DebuggerDisplay,nq}\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003esealed\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSepReader\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderState\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGeneric\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIAsyncEnumerable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRow\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGeneric\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIEnumerable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRow\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGeneric\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIEnumerator\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRow\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIEnumerable\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIEnumerator\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIDisposable\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRow\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eCurrent\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eHasHeader\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eHasRows\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderHeader\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eHeader\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eIsEmpty\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepSpec\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSpec\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eAsyncEnumerator\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eGetAsyncEnumerator\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCancellationToken\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecancellationToken\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edefault\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eGetEnumerator\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eMoveNext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTasks\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eValueTask\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eMoveNextAsync\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCancellationToken\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecancellationToken\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edefault\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereadonly\u003c/span\u003e \u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eAsyncEnumerator\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGeneric\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIAsyncEnumerator\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRow\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIAsyncDisposable\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRow\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eCurrent\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTasks\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eValueTask\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eDisposeAsync\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTasks\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eValueTask\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eMoveNextAsync\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDiagnostics\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDebuggerDisplay\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"{DebuggerDisplay}\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereadonly\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eref\u003c/span\u003e \u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eCol\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eReadOnlySpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003echar\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSpan\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eParse\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ewhere\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eISpanParsable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eoverride\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eTryParse\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ewhere\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eISpanParsable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eTryParse\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003eout\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ewhere\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eISpanParsable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereadonly\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eref\u003c/span\u003e \u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eCols\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eCount\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCol\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eCombinePathsToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eReadOnlySpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003echar\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eJoin\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eReadOnlySpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003echar\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eseparator\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eJoinPathsToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eJoinToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eReadOnlySpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003echar\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eseparator\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eSpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eParse\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ewhere\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eISpanParsable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eParse\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eSpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003espan\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ewhere\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eISpanParsable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eParseToArray\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ewhere\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eISpanParsable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eSpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eSelect\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003emethod\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eselector\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eSpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eSelect\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eColFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eselector\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eSpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eToStrings\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eToStringsArray\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eSpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eTryParse\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ewhere\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eISpanParsable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eTryParse\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eSpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003espan\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ewhere\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eISpanParsable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDiagnostics\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDebuggerDisplay\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"{DebuggerDisplayPrefix,nq}{Span}\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDiagnostics\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDebuggerTypeProxy\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003etypeof\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDebugView\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereadonly\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eref\u003c/span\u003e \u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eRow\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eColCount\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCol\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCol\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIndex\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCol\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolName\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCols\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRange\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erange\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCols\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eReadOnlySpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eindices\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCols\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGeneric\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIReadOnlyList\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eindices\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCols\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eindices\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCols\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eReadOnlySpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolNames\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCols\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGeneric\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIReadOnlyList\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolNames\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCols\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolNames\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eLineNumberFrom\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eLineNumberToExcl\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eRowIndex\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eReadOnlySpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003echar\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSpan\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eUnsafeToStringDelegate\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eoverride\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edelegate\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eColAction\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCol\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecol\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edelegate\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eColFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCol\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecol\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edelegate\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eColsAction\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCols\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecol\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edelegate\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eRowAction\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRow\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edelegate\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eRowFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRow\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edelegate\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eRowTryFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRow\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eout\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSepReaderExtensions\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGeneric\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIEnumerable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eEnumerate\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eRowFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-k\"\u003eselect\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGeneric\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIEnumerable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eEnumerate\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eRowTryFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etrySelect\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGeneric\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIAsyncEnumerable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eEnumerateAsync\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eRowFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-k\"\u003eselect\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGeneric\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIAsyncEnumerable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eEnumerateAsync\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eRowTryFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etrySelect\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eFrom\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebyte\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ebuffer\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eFrom\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIO\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eStream\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estream\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eFrom\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIO\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTextReader\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eFrom\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIO\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eStream\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enameToStream\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eFrom\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIO\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTextReader\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enameToReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTasks\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eValueTask\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eFromAsync\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebyte\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ebuffer\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCancellationToken\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecancellationToken\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edefault\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTasks\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eValueTask\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eFromAsync\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIO\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eStream\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estream\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCancellationToken\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecancellationToken\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edefault\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTasks\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eValueTask\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eFromAsync\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIO\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTextReader\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCancellationToken\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecancellationToken\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edefault\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTasks\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eValueTask\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eFromAsync\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIO\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eStream\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enameToStream\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCancellationToken\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecancellationToken\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edefault\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTasks\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eValueTask\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eFromAsync\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIO\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTextReader\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enameToReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCancellationToken\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecancellationToken\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edefault\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eFromFile\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003efilePath\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTasks\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eValueTask\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eFromFileAsync\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003efilePath\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCancellationToken\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecancellationToken\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edefault\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eFromText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTasks\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eValueTask\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eFromTextAsync\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCancellationToken\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecancellationToken\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edefault\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGeneric\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIEnumerable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eParallelEnumerate\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eRowFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-k\"\u003eselect\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGeneric\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIEnumerable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eParallelEnumerate\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eRowTryFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etrySelect\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGeneric\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIEnumerable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eParallelEnumerate\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eRowFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-k\"\u003eselect\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edegreeOfParallism\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGeneric\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIEnumerable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eParallelEnumerate\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eRowTryFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etrySelect\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edegreeOfParallism\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepSpec\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003espec\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003econfigure\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003econfigure\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepSpec\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003espec\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003econfigure\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003esealed\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSepReaderHeader\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGeneric\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIReadOnlyList\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eColNames\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eIsEmpty\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderHeader\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eEmpty\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eIndexOf\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eReadOnlySpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003echar\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolName\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eIndexOf\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolName\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eIndicesOf\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGeneric\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIReadOnlyList\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolNames\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eIndicesOf\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRuntime\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCompilerServices\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eParamCollection\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRuntime\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCompilerServices\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eScopedRef\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eReadOnlySpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolNames\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eIndicesOf\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003eparams\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolNames\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eIndicesOf\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eReadOnlySpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolNames\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eSpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolIndices\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGeneric\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIReadOnlyList\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eNamesStartingWith\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eprefix\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eStringComparison\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecomparison\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eoverride\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eTryIndexOf\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eReadOnlySpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003echar\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolName\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eout\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolIndex\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eTryIndexOf\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolName\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eout\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolIndex\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereadonly\u003c/span\u003e \u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSepReaderOptions\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIEquatable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReaderOptions\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eSepReaderOptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eSepReaderOptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eAsyncContinueOnCapturedContext\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGeneric\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIEqualityComparer\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eColNameComparer\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepCreateToString\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eCreateToString\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGlobalization\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCultureInfo\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eCultureInfo\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eDisableColCountCheck\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eDisableFastFloat\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eDisableQuotesParsing\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eHasHeader\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eInitialBufferLength\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepTrim\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eTrim\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eUnescape\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSepReaderState\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIDisposable\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eDispose\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSepReaderWriterExtensions\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eCopyTo\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRow\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereaderRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRow\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriterRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRow\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eNewRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRow\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erowToCopy\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRow\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eNewRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRow\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erowToCopy\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCancellationToken\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecancellationToken\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereadonly\u003c/span\u003e \u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSepSpec\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIEquatable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepSpec\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eSepSpec\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eSepSpec\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGlobalization\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCultureInfo\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecultureInfo\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eSepSpec\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGlobalization\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCultureInfo\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecultureInfo\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003easyncContinueOnCapturedContext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eAsyncContinueOnCapturedContext\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGlobalization\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCultureInfo\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eCultureInfo\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eabstract\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSepToString\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIDisposable\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eprotected\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eSepToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evirtual\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eIsThreadSafe\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepCreateToString\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eDirect\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eDispose\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eprotected\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evirtual\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eDispose\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edisposing\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eabstract\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eReadOnlySpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003echar\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolSpan\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolIndex\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepCreateToString\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eOnePool\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003emaximumStringLength\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e32\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einitialCapacity\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e64\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003emaximumCapacity\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4096\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepCreateToString\u003c/span\u003e \u003cspan class=\"pl-en\"\u003ePoolPerCol\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003emaximumStringLength\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e32\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einitialCapacity\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e64\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003emaximumCapacity\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4096\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepCreateToString\u003c/span\u003e \u003cspan class=\"pl-en\"\u003ePoolPerColThreadSafe\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003emaximumStringLength\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e32\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einitialCapacity\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e64\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003emaximumCapacity\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4096\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepCreateToString\u003c/span\u003e \u003cspan class=\"pl-en\"\u003ePoolPerColThreadSafeFixedCapacity\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003emaximumStringLength\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e32\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecapacity\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2048\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eFlags\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eenum\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSepTrim\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebyte\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-c1\"\u003eOuter\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-c1\"\u003eAfterUnescape\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-c1\"\u003eAll\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDiagnostics\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDebuggerDisplay\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"{DebuggerDisplay,nq}\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003esealed\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSepWriter\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIAsyncDisposable\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIDisposable\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterHeader\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eHeader\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepSpec\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSpec\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eDispose\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTasks\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eValueTask\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eDisposeAsync\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eFlush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTasks\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTask\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eFlushAsync\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCancellationToken\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecancellationToken\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edefault\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRow\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eNewRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRow\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eNewRow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCancellationToken\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecancellationToken\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eoverride\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eToString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereadonly\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eref\u003c/span\u003e \u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eCol\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eFormat\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ewhere\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eISpanFormattable\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eSet\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eReadOnlySpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003echar\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003espan\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eSet\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRuntime\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCompilerServices\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eInterpolatedStringHandlerArgument\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eref\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCol\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eFormatInterpolatedStringHandler\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehandler\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eSet\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIFormatProvider\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eprovider\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRuntime\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCompilerServices\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eInterpolatedStringHandlerArgument\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-s\"\u003e\"\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-s\"\u003e\"provider\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eref\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCol\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eFormatInterpolatedStringHandler\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehandler\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRuntime\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCompilerServices\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eInterpolatedStringHandler\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eref\u003c/span\u003e \u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eFormatInterpolatedStringHandler\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eFormatInterpolatedStringHandler\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eliteralLength\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eformattedCount\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCol\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecol\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eFormatInterpolatedStringHandler\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eliteralLength\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eformattedCount\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCol\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecol\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIFormatProvider\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eprovider\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eAppendFormatted\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eReadOnlySpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003echar\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eAppendFormatted\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eAppendFormatted\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eReadOnlySpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003echar\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ealignment\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eformat\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eAppendFormatted\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eobject\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ealignment\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eformat\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eAppendFormatted\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ealignment\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eformat\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eAppendFormatted\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eAppendFormatted\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ealignment\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eAppendFormatted\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eformat\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eAppendFormatted\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ealignment\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eformat\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eAppendLiteral\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereadonly\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eref\u003c/span\u003e \u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eCols\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eCount\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCol\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolIndex\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eFormat\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGeneric\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIReadOnlyList\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ewhere\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eISpanFormattable\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eFormat\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRuntime\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCompilerServices\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eParamCollection\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRuntime\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCompilerServices\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eScopedRef\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eReadOnlySpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ewhere\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eISpanFormattable\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eFormat\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eSpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ewhere\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eISpanFormattable\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eFormat\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ewhere\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eISpanFormattable\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eFormat\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eReadOnlySpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eColAction\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eformat\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eSet\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGeneric\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIReadOnlyList\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eSet\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRuntime\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCompilerServices\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eParamCollection\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRuntime\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCompilerServices\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eScopedRef\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eReadOnlySpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eSet\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eSet\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepReader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCols\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecols\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eref\u003c/span\u003e \u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eRow\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIAsyncDisposable\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIDisposable\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCol\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolIndex\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCol\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolName\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCols\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eReadOnlySpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eindices\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCols\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eReadOnlySpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolNames\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCols\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGeneric\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIReadOnlyList\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolNames\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCols\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolNames\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eDispose\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTasks\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eValueTask\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eDisposeAsync\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edelegate\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eColAction\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCol\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecol\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edelegate\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eColAction\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eT\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCol\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecol\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eT\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edelegate\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eRowAction\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRow\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSepWriterExtensions\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eTo\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIO\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eStream\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estream\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eTo\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIO\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTextWriter\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eTo\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eStringBuilder\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estringBuilder\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eTo\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIO\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eStream\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estream\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eleaveOpen\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eTo\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIO\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTextWriter\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eleaveOpen\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eTo\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIO\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eStream\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enameToStream\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eleaveOpen\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003efalse\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eTo\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eIO\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTextWriter\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enameToWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eleaveOpen\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003efalse\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eToFile\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003efilePath\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eToText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriter\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eToText\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterOptions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecapacity\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterOptions\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterOptions\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepSpec\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003espec\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterOptions\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterOptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterOptions\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003econfigure\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterOptions\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eWriter\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepSpec\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003espec\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterOptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterOptions\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003econfigure\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDiagnostics\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDebuggerDisplay\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"{DebuggerDisplay,nq}\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDiagnostics\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDebuggerTypeProxy\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003etypeof\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterHeader\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDebugView\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003esealed\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSepWriterHeader\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eAdd\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCollections\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGeneric\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIReadOnlyList\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolNames\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eAdd\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRuntime\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCompilerServices\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eParamCollection\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eRuntime\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCompilerServices\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eScopedRef\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eReadOnlySpan\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolNames\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eAdd\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolName\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eAdd\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolNames\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eWrite\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eTasks\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eValueTask\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eWriteAsync\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eThreading\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCancellationToken\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecancellationToken\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edefault\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereadonly\u003c/span\u003e \u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSepWriterOptions\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIEquatable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepWriterOptions\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eSepWriterOptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eSepWriterOptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eAsyncContinueOnCapturedContext\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSepColNotSetOption\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eColNotSetOption\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSystem\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eGlobalization\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCultureInfo\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eCultureInfo\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eDisableColCountCheck\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eEscape\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enietras\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSeparatedValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSep\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eWriteHeader\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003einit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003c/article\u003e","loaded":true,"timedOut":false,"errorMessage":null,"headerInfo":{"toc":[{"level":1,"text":"Sep - the World's Fastest .NET CSV Parser","anchor":"sep---the-worlds-fastest-net-csv-parser","htmlText":"Sep - the World's Fastest .NET CSV Parser"},{"level":2,"text":"Example","anchor":"example","htmlText":"Example"},{"level":2,"text":"Naming and Terminology","anchor":"naming-and-terminology","htmlText":"Naming and Terminology"},{"level":2,"text":"Application Programming Interface (API)","anchor":"application-programming-interface-api","htmlText":"Application Programming Interface (API)"},{"level":3,"text":"API Pattern","anchor":"api-pattern","htmlText":"API Pattern"},{"level":3,"text":"SepReader API","anchor":"sepreader-api","htmlText":"SepReader API"},{"level":4,"text":"SepReaderOptions","anchor":"sepreaderoptions","htmlText":"SepReaderOptions"},{"level":4,"text":"Unescaping","anchor":"unescaping","htmlText":"Unescaping"},{"level":4,"text":"Trimming","anchor":"trimming","htmlText":"Trimming"},{"level":4,"text":"SepReader Debuggability","anchor":"sepreader-debuggability","htmlText":"SepReader Debuggability"},{"level":5,"text":"SepReader.Row Debuggability","anchor":"sepreaderrow-debuggability","htmlText":"SepReader.Row Debuggability"},{"level":5,"text":"SepReader.Col Debuggability","anchor":"sepreadercol-debuggability","htmlText":"SepReader.Col Debuggability"},{"level":4,"text":"Why SepReader Was Not IEnumerable Until .NET 9 and Is Not LINQ Compatible","anchor":"why-sepreader-was-not-ienumerable-until-net-9-and-is-not-linq-compatible","htmlText":"Why SepReader Was Not IEnumerable Until .NET 9 and Is Not LINQ Compatible"},{"level":4,"text":"ParallelEnumerate and Enumerate","anchor":"parallelenumerate-and-enumerate","htmlText":"ParallelEnumerate and Enumerate"},{"level":3,"text":"SepWriter API","anchor":"sepwriter-api","htmlText":"SepWriter API"},{"level":4,"text":"SepWriterOptions","anchor":"sepwriteroptions","htmlText":"SepWriterOptions"},{"level":4,"text":"Escaping","anchor":"escaping","htmlText":"Escaping"},{"level":2,"text":"Async Support","anchor":"async-support","htmlText":"Async Support"},{"level":2,"text":"Limitations and Constraints","anchor":"limitations-and-constraints","htmlText":"Limitations and Constraints"},{"level":2,"text":"Comparison Benchmarks","anchor":"comparison-benchmarks","htmlText":"Comparison Benchmarks"},{"level":3,"text":"Runtime and Platforms","anchor":"runtime-and-platforms","htmlText":"Runtime and Platforms"},{"level":3,"text":"Reader Comparison Benchmarks","anchor":"reader-comparison-benchmarks","htmlText":"Reader Comparison Benchmarks"},{"level":4,"text":"NCsvPerf PackageAssets Reader Comparison Benchmarks","anchor":"ncsvperf-packageassets-reader-comparison-benchmarks","htmlText":"NCsvPerf PackageAssets Reader Comparison Benchmarks"},{"level":5,"text":"PackageAssets Benchmark Results","anchor":"packageassets-benchmark-results","htmlText":"PackageAssets Benchmark Results"},{"level":6,"text":"AMD.EPYC.7763 - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"amdepyc7763---packageassets-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"AMD.EPYC.7763 - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":6,"text":"AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"amdryzen7pro7840uwradeon780m---packageassets-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":6,"text":"AMD.Ryzen.9.5950X - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"amdryzen95950x---packageassets-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"AMD.Ryzen.9.5950X - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":6,"text":"Apple.M1.(Virtual) - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"applem1virtual---packageassets-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"Apple.M1.(Virtual) - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":5,"text":"PackageAssets Benchmark Results (SERVER GC)","anchor":"packageassets-benchmark-results-server-gc","htmlText":"PackageAssets Benchmark Results (SERVER GC)"},{"level":6,"text":"AMD.EPYC.7763 - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"amdepyc7763---packageassets-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"AMD.EPYC.7763 - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":6,"text":"AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"amdryzen7pro7840uwradeon780m---packageassets-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":6,"text":"AMD.Ryzen.9.5950X - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"amdryzen95950x---packageassets-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"AMD.Ryzen.9.5950X - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":6,"text":"Apple.M1.(Virtual) - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"applem1virtual---packageassets-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"Apple.M1.(Virtual) - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":5,"text":"PackageAssets with Quotes Benchmark Results","anchor":"packageassets-with-quotes-benchmark-results","htmlText":"PackageAssets with Quotes Benchmark Results"},{"level":6,"text":"AMD.EPYC.7763 - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"amdepyc7763---packageassets-with-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"AMD.EPYC.7763 - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":6,"text":"AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"amdryzen7pro7840uwradeon780m---packageassets-with-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":6,"text":"AMD.Ryzen.9.5950X - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"amdryzen95950x---packageassets-with-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"AMD.Ryzen.9.5950X - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":6,"text":"Apple.M1.(Virtual) - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"applem1virtual---packageassets-with-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"Apple.M1.(Virtual) - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":5,"text":"PackageAssets with Quotes Benchmark Results (SERVER GC)","anchor":"packageassets-with-quotes-benchmark-results-server-gc","htmlText":"PackageAssets with Quotes Benchmark Results (SERVER GC)"},{"level":6,"text":"AMD.EPYC.7763 - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"amdepyc7763---packageassets-with-quotes-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"AMD.EPYC.7763 - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":6,"text":"AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"amdryzen7pro7840uwradeon780m---packageassets-with-quotes-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":6,"text":"AMD.Ryzen.9.5950X - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"amdryzen95950x---packageassets-with-quotes-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"AMD.Ryzen.9.5950X - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":6,"text":"Apple.M1.(Virtual) - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"applem1virtual---packageassets-with-quotes-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"Apple.M1.(Virtual) - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":5,"text":"PackageAssets with Spaces and Quotes Benchmark Results","anchor":"packageassets-with-spaces-and-quotes-benchmark-results","htmlText":"PackageAssets with Spaces and Quotes Benchmark Results"},{"level":6,"text":"AMD.EPYC.7763 - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"amdepyc7763---packageassets-with-spaces-and-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"AMD.EPYC.7763 - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":6,"text":"AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"amdryzen7pro7840uwradeon780m---packageassets-with-spaces-and-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":6,"text":"AMD.Ryzen.9.5950X - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"amdryzen95950x---packageassets-with-spaces-and-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"AMD.Ryzen.9.5950X - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":6,"text":"Apple.M1.(Virtual) - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"applem1virtual---packageassets-with-spaces-and-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"Apple.M1.(Virtual) - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":4,"text":"Floats Reader Comparison Benchmarks","anchor":"floats-reader-comparison-benchmarks","htmlText":"Floats Reader Comparison Benchmarks"},{"level":5,"text":"AMD.EPYC.7763 - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"amdepyc7763---floatsreader-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"AMD.EPYC.7763 - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":5,"text":"AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"amdryzen7pro7840uwradeon780m---floatsreader-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":5,"text":"AMD.Ryzen.9.5950X - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"amdryzen95950x---floatsreader-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"AMD.Ryzen.9.5950X - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":5,"text":"Apple.M1.(Virtual) - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)","anchor":"applem1virtual---floatsreader-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124","htmlText":"Apple.M1.(Virtual) - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)"},{"level":3,"text":"Writer Comparison Benchmarks","anchor":"writer-comparison-benchmarks","htmlText":"Writer Comparison Benchmarks"},{"level":2,"text":"Example Catalogue","anchor":"example-catalogue","htmlText":"Example Catalogue"},{"level":3,"text":"Example - Copy Rows","anchor":"example---copy-rows","htmlText":"Example - Copy Rows"},{"level":3,"text":"Example - Copy Rows (Async)","anchor":"example---copy-rows-async","htmlText":"Example - Copy Rows (Async)"},{"level":3,"text":"Example - Skip Empty Rows","anchor":"example---skip-empty-rows","htmlText":"Example - Skip Empty Rows"},{"level":3,"text":"Example - Use Extension Method Enumerate within async/await Context (prior to C# 13.0)","anchor":"example---use-extension-method-enumerate-within-asyncawait-context-prior-to-c-130","htmlText":"Example - Use Extension Method Enumerate within async/await Context (prior to C# 13.0)"},{"level":3,"text":"Example - Use Local Function within async/await Context","anchor":"example---use-local-function-within-asyncawait-context","htmlText":"Example - Use Local Function within async/await Context"},{"level":3,"text":"Example - Skip Lines/Rows Starting with Comment #","anchor":"example---skip-linesrows-starting-with-comment-","htmlText":"Example - Skip Lines/Rows Starting with Comment #"},{"level":2,"text":"RFC-4180","anchor":"rfc-4180","htmlText":"RFC-4180"},{"level":2,"text":"Frequently Asked Questions (FAQ)","anchor":"frequently-asked-questions-faq","htmlText":"Frequently Asked Questions (FAQ)"},{"level":3,"text":"SepReader FAQ","anchor":"sepreader-faq","htmlText":"SepReader FAQ"},{"level":3,"text":"SepWriter FAQ","anchor":"sepwriter-faq","htmlText":"SepWriter FAQ"},{"level":2,"text":"Links","anchor":"links","htmlText":"Links"},{"level":2,"text":"Public API Reference","anchor":"public-api-reference","htmlText":"Public API Reference"}],"siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Fnietras%2FSep"}},{"displayName":"CODE_OF_CONDUCT.md","repoName":"Sep","refName":"main","path":"CODE_OF_CONDUCT.md","preferredFileType":"code_of_conduct","tabName":"Code of conduct","richText":null,"loaded":false,"timedOut":false,"errorMessage":null,"headerInfo":{"toc":null,"siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Fnietras%2FSep"}},{"displayName":"LICENSE","repoName":"Sep","refName":"main","path":"LICENSE","preferredFileType":"license","tabName":"MIT","richText":null,"loaded":false,"timedOut":false,"errorMessage":null,"headerInfo":{"toc":null,"siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Fnietras%2FSep"}},{"displayName":"SECURITY.md","repoName":"Sep","refName":"main","path":"SECURITY.md","preferredFileType":"security","tabName":"Security","richText":null,"loaded":false,"timedOut":false,"errorMessage":null,"headerInfo":{"toc":null,"siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Fnietras%2FSep"}}],"overviewFilesProcessingTime":0}},"appPayload":{"helpUrl":"https://docs.github.com","findFileWorkerPath":"/assets-cdn/worker/find-file-worker-7d7eb7c71814.js","findInFileWorkerPath":"/assets-cdn/worker/find-in-file-worker-708ec8ade250.js","githubDevUrl":null,"enabled_features":{"copilot_workspace":null,"code_nav_ui_events":false,"overview_shared_code_dropdown_button":true,"react_blob_overlay":false,"accessible_code_button":true,"github_models_repo_integration":false}}}}</script> <div data-target="react-partial.reactRoot"><style data-styled="true" data-styled-version="5.3.11">.iVEunk{margin-top:16px;margin-bottom:16px;}/*!sc*/ .jzuOtQ{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;}/*!sc*/ .bGojzy{margin-bottom:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;row-gap:16px;}/*!sc*/ .iNSVHo{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding-bottom:16px;padding-top:8px;}/*!sc*/ .bVgnfw{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;gap:8px;}/*!sc*/ @media screen and (max-width:320px){.bVgnfw{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}}/*!sc*/ .CEgMp{position:relative;}/*!sc*/ @media screen and (max-width:380px){.CEgMp .ref-selector-button-text-container{max-width:80px;}}/*!sc*/ @media screen and (max-width:320px){.CEgMp{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}.CEgMp .overview-ref-selector{width:100%;}.CEgMp .overview-ref-selector > span{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;}.CEgMp .overview-ref-selector > span > span[data-component="text"]{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}}/*!sc*/ .gMOVLe[data-size="medium"]{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;min-width:0;}/*!sc*/ .gMOVLe[data-size="medium"] svg{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .gMOVLe[data-size="medium"] > span{width:inherit;}/*!sc*/ .gUkoLg{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}/*!sc*/ .bZBlpz{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;}/*!sc*/ .lhTYNA{margin-right:4px;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .ffLUq{font-size:14px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}/*!sc*/ .bmcJak{min-width:0;}/*!sc*/ .fLXEGX{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (max-width:1079px){.fLXEGX{display:none;}}/*!sc*/ .lmSMZJ[data-size="medium"]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));padding-left:4px;padding-right:4px;}/*!sc*/ .lmSMZJ[data-size="medium"] span[data-component="leadingVisual"]{margin-right:4px !important;}/*!sc*/ .dqfxud{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (min-width:1080px){.dqfxud{display:none;}}/*!sc*/ @media screen and (max-width:543px){.dqfxud{display:none;}}/*!sc*/ .fGwBZA[data-size="medium"][data-no-visuals]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .jxTzTd{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:8px;gap:8px;}/*!sc*/ .gqqBXN{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:8px;}/*!sc*/ @media screen and (max-width:543px){.gqqBXN{display:none;}}/*!sc*/ .dzXgxt{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (max-width:1011px){.dzXgxt{display:none;}}/*!sc*/ .iWFGlI{margin-left:8px;margin-right:8px;margin:0;}/*!sc*/ .vcvyP{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;min-width:160px;}/*!sc*/ .YUPas{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (min-width:1012px){.YUPas{display:none;}}/*!sc*/ .izFOf{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (min-width:544px){.izFOf{display:none;}}/*!sc*/ .vIPPs{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:16px;}/*!sc*/ .fdROMU{width:100%;border-collapse:separate;border-spacing:0;border:1px solid;border-color:var(--borderColor-default,var(--color-border-default,#d0d7de));border-radius:6px;table-layout:fixed;overflow:unset;}/*!sc*/ .jGKpsv{height:0px;line-height:0px;}/*!sc*/ .jGKpsv tr{height:0px;font-size:0px;}/*!sc*/ .jdgHnn{padding:16px;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));font-size:12px;text-align:left;height:40px;}/*!sc*/ .jdgHnn th{padding-left:16px;background-color:var(--bgColor-muted,var(--color-canvas-subtle,#f6f8fa));}/*!sc*/ .bQivRW{width:100%;border-top-left-radius:6px;}/*!sc*/ @media screen and (min-width:544px){.bQivRW{display:none;}}/*!sc*/ .ldkMIO{width:40%;border-top-left-radius:6px;}/*!sc*/ @media screen and (max-width:543px){.ldkMIO{display:none;}}/*!sc*/ .jMbWeI{text-align:right;padding-right:16px;width:136px;border-top-right-radius:6px;}/*!sc*/ .gpqjiB{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));font-size:12px;height:40px;}/*!sc*/ .dzCJzi{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;min-width:273px;padding:8px;}/*!sc*/ @media screen and (min-width:544px){.dzCJzi{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;}}/*!sc*/ .eNCcrz{text-align:center;vertical-align:center;height:40px;border-top:1px solid;border-color:var(--borderColor-default,var(--color-border-default,#d0d7de));}/*!sc*/ .bHTcCe{border-top:1px solid var(--borderColor-default,var(--color-border-default));cursor:pointer;}/*!sc*/ .csrIcr{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;gap:16px;}/*!sc*/ .bUQNHB{border:1px solid;border-color:var(--borderColor-default,var(--color-border-default,#d0d7de));border-radius:6px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}/*!sc*/ @media screen and (max-width:543px){.bUQNHB{margin-left:-16px;margin-right:-16px;max-width:calc(100% + 32px);}}/*!sc*/ @media screen and (min-width:544px){.bUQNHB{max-width:100%;}}/*!sc*/ .jPdcfu{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border-bottom:1px solid;border-bottom-color:var(--borderColor-default,var(--color-border-default,#d0d7de));-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-right:8px;position:-webkit-sticky;position:sticky;top:0;background-color:var(--bgColor-default,var(--color-canvas-default,#ffffff));z-index:1;border-top-left-radius:6px;border-top-right-radius:6px;}/*!sc*/ .iphEWz{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;border-bottom:none;max-width:100%;padding-left:8px;padding-right:8px;}/*!sc*/ .hUCRAk{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}/*!sc*/ .cwoBXV[data-size="medium"]{color:var(--fgColor-muted,var(--color-fg-subtle,#6e7781));padding-left:8px;padding-right:8px;}/*!sc*/ .QkQOb{padding:32px;overflow:auto;}/*!sc*/ data-styled.g1[id="Box-sc-g0xbh4-0"]{content:"iVEunk,jzuOtQ,bGojzy,iNSVHo,bVgnfw,CEgMp,gMOVLe,gUkoLg,bZBlpz,lhTYNA,ffLUq,bmcJak,fLXEGX,lmSMZJ,dqfxud,fGwBZA,jxTzTd,gqqBXN,dzXgxt,iWFGlI,vcvyP,YUPas,izFOf,vIPPs,fdROMU,jGKpsv,jdgHnn,bQivRW,ldkMIO,jMbWeI,gpqjiB,dzCJzi,eNCcrz,bHTcCe,csrIcr,bUQNHB,jPdcfu,iphEWz,hUCRAk,cwoBXV,QkQOb,"}/*!sc*/ .brGdpi{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;-webkit-clip:rect(0,0,0,0);clip:rect(0,0,0,0);white-space:nowrap;border-width:0;}/*!sc*/ data-styled.g5[id="_VisuallyHidden__VisuallyHidden-sc-11jhm7a-0"]{content:"brGdpi,"}/*!sc*/ .hWlpPn{position:relative;display:inline-block;}/*!sc*/ .hWlpPn::after{position:absolute;z-index:1000000;display:none;padding:0.5em 0.75em;font:normal normal 11px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";-webkit-font-smoothing:subpixel-antialiased;color:var(--tooltip-fgColor,var(--fgColor-onEmphasis,var(--color-fg-on-emphasis,#ffffff)));text-align:center;-webkit-text-decoration:none;text-decoration:none;text-shadow:none;text-transform:none;-webkit-letter-spacing:normal;-moz-letter-spacing:normal;-ms-letter-spacing:normal;letter-spacing:normal;word-wrap:break-word;white-space:pre;pointer-events:none;content:attr(aria-label);background:var(--tooltip-bgColor,var(--bgColor-emphasis,var(--color-neutral-emphasis-plus,#24292f)));border-radius:6px;opacity:0;}/*!sc*/ @-webkit-keyframes tooltip-appear{from{opacity:0;}to{opacity:1;}}/*!sc*/ @keyframes tooltip-appear{from{opacity:0;}to{opacity:1;}}/*!sc*/ .hWlpPn:hover::after,.hWlpPn:active::after,.hWlpPn:focus::after,.hWlpPn:focus-within::after{display:inline-block;-webkit-text-decoration:none;text-decoration:none;-webkit-animation-name:tooltip-appear;animation-name:tooltip-appear;-webkit-animation-duration:0.1s;animation-duration:0.1s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-animation-delay:0s;animation-delay:0s;}/*!sc*/ .hWlpPn.tooltipped-no-delay:hover::after,.hWlpPn.tooltipped-no-delay:active::after,.hWlpPn.tooltipped-no-delay:focus::after,.hWlpPn.tooltipped-no-delay:focus-within::after{-webkit-animation-delay:0s;animation-delay:0s;}/*!sc*/ .hWlpPn.tooltipped-multiline:hover::after,.hWlpPn.tooltipped-multiline:active::after,.hWlpPn.tooltipped-multiline:focus::after,.hWlpPn.tooltipped-multiline:focus-within::after{display:table-cell;}/*!sc*/ .hWlpPn.tooltipped-s::after,.hWlpPn.tooltipped-se::after,.hWlpPn.tooltipped-sw::after{top:100%;right:50%;margin-top:6px;}/*!sc*/ .hWlpPn.tooltipped-se::after{right:auto;left:50%;margin-left:-16px;}/*!sc*/ .hWlpPn.tooltipped-sw::after{margin-right:-16px;}/*!sc*/ .hWlpPn.tooltipped-n::after,.hWlpPn.tooltipped-ne::after,.hWlpPn.tooltipped-nw::after{right:50%;bottom:100%;margin-bottom:6px;}/*!sc*/ .hWlpPn.tooltipped-ne::after{right:auto;left:50%;margin-left:-16px;}/*!sc*/ .hWlpPn.tooltipped-nw::after{margin-right:-16px;}/*!sc*/ .hWlpPn.tooltipped-s::after,.hWlpPn.tooltipped-n::after{-webkit-transform:translateX(50%);-ms-transform:translateX(50%);transform:translateX(50%);}/*!sc*/ .hWlpPn.tooltipped-w::after{right:100%;bottom:50%;margin-right:6px;-webkit-transform:translateY(50%);-ms-transform:translateY(50%);transform:translateY(50%);}/*!sc*/ .hWlpPn.tooltipped-e::after{bottom:50%;left:100%;margin-left:6px;-webkit-transform:translateY(50%);-ms-transform:translateY(50%);transform:translateY(50%);}/*!sc*/ .hWlpPn.tooltipped-multiline::after{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:250px;word-wrap:break-word;white-space:pre-line;border-collapse:separate;}/*!sc*/ .hWlpPn.tooltipped-multiline.tooltipped-s::after,.hWlpPn.tooltipped-multiline.tooltipped-n::after{right:auto;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);}/*!sc*/ .hWlpPn.tooltipped-multiline.tooltipped-w::after,.hWlpPn.tooltipped-multiline.tooltipped-e::after{right:100%;}/*!sc*/ .hWlpPn.tooltipped-align-right-2::after{right:0;margin-right:0;}/*!sc*/ .hWlpPn.tooltipped-align-left-2::after{left:0;margin-left:0;}/*!sc*/ data-styled.g16[id="Tooltip__TooltipBase-sc-17tf59c-0"]{content:"hWlpPn,"}/*!sc*/ .liVpTx{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:125px;}/*!sc*/ data-styled.g18[id="Truncate__StyledTruncate-sc-23o1d2-0"]{content:"liVpTx,"}/*!sc*/ </style> <!-- --> <!-- --> <div class="Box-sc-g0xbh4-0 iVEunk"><div class="Box-sc-g0xbh4-0 jzuOtQ"><div class="Box-sc-g0xbh4-0 bGojzy"></div></div><div class="Box-sc-g0xbh4-0 iNSVHo"><div class="Box-sc-g0xbh4-0 bVgnfw"><div class="Box-sc-g0xbh4-0 CEgMp"><button type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="main branch" data-testid="anchor-button" class="Box-sc-g0xbh4-0 gMOVLe prc-Button-ButtonBase-c50BI overview-ref-selector width-full" data-loading="false" data-size="medium" data-variant="default" aria-describedby="branch-picker-repos-header-ref-selector-loading-announcement" id="branch-picker-repos-header-ref-selector"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg prc-Button-ButtonContent-HKbr-"><span data-component="text" class="prc-Button-Label-pTQ3x"><div class="Box-sc-g0xbh4-0 bZBlpz"><div class="Box-sc-g0xbh4-0 lhTYNA"><svg aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></div><div class="Box-sc-g0xbh4-0 ffLUq ref-selector-button-text-container"><span class="Box-sc-g0xbh4-0 bmcJak prc-Text-Text-0ima0"> <!-- -->main</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><button hidden="" data-hotkey-scope="read-only-cursor-text-area"></button></div><div class="Box-sc-g0xbh4-0 fLXEGX"><a style="--button-color:fg.muted" type="button" href="/nietras/Sep/branches" class="Box-sc-g0xbh4-0 lmSMZJ prc-Button-ButtonBase-c50BI" data-loading="false" data-size="medium" data-variant="invisible" aria-describedby=":Rclab:-loading-announcement"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg prc-Button-ButtonContent-HKbr-"><span data-component="leadingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-pTQ3x">Branches</span></span></a><a style="--button-color:fg.muted" type="button" href="/nietras/Sep/tags" class="Box-sc-g0xbh4-0 lmSMZJ prc-Button-ButtonBase-c50BI" data-loading="false" data-size="medium" data-variant="invisible" aria-describedby=":Rklab:-loading-announcement"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg prc-Button-ButtonContent-HKbr-"><span data-component="leadingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-tag" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"></path></svg></span><span data-component="text" class="prc-Button-Label-pTQ3x">Tags</span></span></a></div><div class="Box-sc-g0xbh4-0 dqfxud"><a style="--button-color:fg.muted" type="button" aria-label="Go to Branches page" href="/nietras/Sep/branches" class="Box-sc-g0xbh4-0 fGwBZA prc-Button-ButtonBase-c50BI" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-describedby=":Relab:-loading-announcement"><svg aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></a><a style="--button-color:fg.muted" type="button" aria-label="Go to Tags page" href="/nietras/Sep/tags" class="Box-sc-g0xbh4-0 fGwBZA prc-Button-ButtonBase-c50BI" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-describedby=":Rmlab:-loading-announcement"><svg aria-hidden="true" focusable="false" class="octicon octicon-tag" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"></path></svg></a></div></div><div class="Box-sc-g0xbh4-0 jxTzTd"><div class="Box-sc-g0xbh4-0 gqqBXN"><div class="Box-sc-g0xbh4-0 dzXgxt"><!--$--><div class="Box-sc-g0xbh4-0 iWFGlI"><span class="Box-sc-g0xbh4-0 vcvyP TextInput-wrapper prc-components-TextInputWrapper-i1ofR prc-components-TextInputBaseWrapper-ueK9q" data-leading-visual="true" data-trailing-visual="true" aria-busy="false"><span class="TextInput-icon" id=":R2j5ab:" aria-hidden="true"><svg aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></span><input type="text" aria-label="Go to file" role="combobox" aria-controls="file-results-list" aria-expanded="false" aria-haspopup="dialog" autoCorrect="off" spellcheck="false" placeholder="Go to file" aria-describedby=":R2j5ab: :R2j5abH1:" data-component="input" class="prc-components-Input-Ic-y8" value=""/><span class="TextInput-icon" id=":R2j5abH1:" aria-hidden="true"></span></span></div><!--/$--></div><div class="Box-sc-g0xbh4-0 YUPas"><button type="button" class="prc-Button-ButtonBase-c50BI" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":Rr5ab:-loading-announcement"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="text" class="prc-Button-Label-pTQ3x">Go to file</span></span></button></div><div class="react-directory-add-file-icon"></div><div class="react-directory-remove-file-icon"></div></div><button type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-c50BI" data-loading="false" data-size="medium" data-variant="primary" aria-describedby=":R55ab:-loading-announcement" id=":R55ab:"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="leadingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-code hide-sm" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></span><span data-component="text" class="prc-Button-Label-pTQ3x">Code</span><span data-component="trailingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="Box-sc-g0xbh4-0 izFOf"><button data-component="IconButton" type="button" aria-label="Open more actions menu" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":R75ab:-loading-announcement" id=":R75ab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button></div></div></div><div class="Box-sc-g0xbh4-0 vIPPs"><div data-hpc="true"><button hidden="" data-testid="focus-next-element-button" data-hotkey="j"></button><button hidden="" data-testid="focus-previous-element-button" data-hotkey="k"></button><h2 class="sr-only ScreenReaderHeading-module__userSelectNone--vW4Cq prc-Heading-Heading-6CmGO" data-testid="screen-reader-heading" id="folders-and-files">Folders and files</h2><table aria-labelledby="folders-and-files" class="Box-sc-g0xbh4-0 fdROMU"><thead class="Box-sc-g0xbh4-0 jGKpsv"><tr class="Box-sc-g0xbh4-0 jdgHnn"><th colSpan="2" class="Box-sc-g0xbh4-0 bQivRW"><span class="text-bold">Name</span></th><th colSpan="1" class="Box-sc-g0xbh4-0 ldkMIO"><span class="text-bold">Name</span></th><th class="hide-sm"><div title="Last commit message" class="Truncate__StyledTruncate-sc-23o1d2-0 liVpTx width-fit"><span class="text-bold">Last commit message</span></div></th><th colSpan="1" class="Box-sc-g0xbh4-0 jMbWeI"><div title="Last commit date" class="Truncate__StyledTruncate-sc-23o1d2-0 liVpTx width-fit"><span class="text-bold">Last commit date</span></div></th></tr></thead><tbody><tr class="Box-sc-g0xbh4-0 gpqjiB"><td colSpan="3" class="bgColor-muted p-1 rounded-top-2"><div class="Box-sc-g0xbh4-0 dzCJzi"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone--vW4Cq prc-Heading-Heading-6CmGO" data-testid="screen-reader-heading">Latest commit</h2><div style="width:120px" class="Skeleton Skeleton--text" data-testid="loading"> </div><div class="d-flex flex-shrink-0 gap-2"><div data-testid="latest-commit-details" class="d-none d-sm-flex flex-items-center"></div><div class="d-flex gap-2"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone--vW4Cq prc-Heading-Heading-6CmGO" data-testid="screen-reader-heading">History</h2><a href="/nietras/Sep/commits/main/" class="prc-Button-ButtonBase-c50BI d-none d-lg-flex LinkButton-module__code-view-link-button--xvCGA flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible" aria-describedby=":Raqj8pab:-loading-announcement"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="leadingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span><span data-component="text" class="prc-Button-Label-pTQ3x"><span class="fgColor-default">227 Commits</span></span></span></a><div class="d-sm-none"></div><div class="d-flex d-lg-none"><span role="tooltip" aria-label="227 Commits" id="history-icon-button-tooltip" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-n"><a href="/nietras/Sep/commits/main/" class="prc-Button-ButtonBase-c50BI LinkButton-module__code-view-link-button--xvCGA flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible" aria-describedby=":R1iqj8pab:-loading-announcement history-icon-button-tooltip"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="leadingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span></span></a></span></div></div></div></div></td></tr><tr class="react-directory-row undefined" id="folder-row-0"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".github" aria-label=".github, (Directory)" class="Link--primary" href="/nietras/Sep/tree/main/.github">.github</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".github" aria-label=".github, (Directory)" class="Link--primary" href="/nietras/Sep/tree/main/.github">.github</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-1"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="benchmarks" aria-label="benchmarks, (Directory)" class="Link--primary" href="/nietras/Sep/tree/main/benchmarks">benchmarks</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="benchmarks" aria-label="benchmarks, (Directory)" class="Link--primary" href="/nietras/Sep/tree/main/benchmarks">benchmarks</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-2"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="src" aria-label="src, (Directory)" class="Link--primary" href="/nietras/Sep/tree/main/src">src</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="src" aria-label="src, (Directory)" class="Link--primary" href="/nietras/Sep/tree/main/src">src</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-3"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".editorconfig" aria-label=".editorconfig, (File)" class="Link--primary" href="/nietras/Sep/blob/main/.editorconfig">.editorconfig</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".editorconfig" aria-label=".editorconfig, (File)" class="Link--primary" href="/nietras/Sep/blob/main/.editorconfig">.editorconfig</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-4"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".gitattributes" aria-label=".gitattributes, (File)" class="Link--primary" href="/nietras/Sep/blob/main/.gitattributes">.gitattributes</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".gitattributes" aria-label=".gitattributes, (File)" class="Link--primary" href="/nietras/Sep/blob/main/.gitattributes">.gitattributes</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-5"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".gitignore" aria-label=".gitignore, (File)" class="Link--primary" href="/nietras/Sep/blob/main/.gitignore">.gitignore</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".gitignore" aria-label=".gitignore, (File)" class="Link--primary" href="/nietras/Sep/blob/main/.gitignore">.gitignore</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-6"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".jscpd.json" aria-label=".jscpd.json, (File)" class="Link--primary" href="/nietras/Sep/blob/main/.jscpd.json">.jscpd.json</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".jscpd.json" aria-label=".jscpd.json, (File)" class="Link--primary" href="/nietras/Sep/blob/main/.jscpd.json">.jscpd.json</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-7"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".markdownlint.json" aria-label=".markdownlint.json, (File)" class="Link--primary" href="/nietras/Sep/blob/main/.markdownlint.json">.markdownlint.json</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".markdownlint.json" aria-label=".markdownlint.json, (File)" class="Link--primary" href="/nietras/Sep/blob/main/.markdownlint.json">.markdownlint.json</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-8"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".pre-commit-config.yaml" aria-label=".pre-commit-config.yaml, (File)" class="Link--primary" href="/nietras/Sep/blob/main/.pre-commit-config.yaml">.pre-commit-config.yaml</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".pre-commit-config.yaml" aria-label=".pre-commit-config.yaml, (File)" class="Link--primary" href="/nietras/Sep/blob/main/.pre-commit-config.yaml">.pre-commit-config.yaml</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-9"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="CODE_OF_CONDUCT.md" aria-label="CODE_OF_CONDUCT.md, (File)" class="Link--primary" href="/nietras/Sep/blob/main/CODE_OF_CONDUCT.md">CODE_OF_CONDUCT.md</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="CODE_OF_CONDUCT.md" aria-label="CODE_OF_CONDUCT.md, (File)" class="Link--primary" href="/nietras/Sep/blob/main/CODE_OF_CONDUCT.md">CODE_OF_CONDUCT.md</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-10"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="CONTRIBUTING.md" aria-label="CONTRIBUTING.md, (File)" class="Link--primary" href="/nietras/Sep/blob/main/CONTRIBUTING.md">CONTRIBUTING.md</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="CONTRIBUTING.md" aria-label="CONTRIBUTING.md, (File)" class="Link--primary" href="/nietras/Sep/blob/main/CONTRIBUTING.md">CONTRIBUTING.md</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-11"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="Icon.png" aria-label="Icon.png, (File)" class="Link--primary" href="/nietras/Sep/blob/main/Icon.png">Icon.png</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="Icon.png" aria-label="Icon.png, (File)" class="Link--primary" href="/nietras/Sep/blob/main/Icon.png">Icon.png</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-12"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="LICENSE" aria-label="LICENSE, (File)" class="Link--primary" href="/nietras/Sep/blob/main/LICENSE">LICENSE</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="LICENSE" aria-label="LICENSE, (File)" class="Link--primary" href="/nietras/Sep/blob/main/LICENSE">LICENSE</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-13"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="README.md" aria-label="README.md, (File)" class="Link--primary" href="/nietras/Sep/blob/main/README.md">README.md</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="README.md" aria-label="README.md, (File)" class="Link--primary" href="/nietras/Sep/blob/main/README.md">README.md</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-14"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="SECURITY.md" aria-label="SECURITY.md, (File)" class="Link--primary" href="/nietras/Sep/blob/main/SECURITY.md">SECURITY.md</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="SECURITY.md" aria-label="SECURITY.md, (File)" class="Link--primary" href="/nietras/Sep/blob/main/SECURITY.md">SECURITY.md</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-15"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="Sep.sln" aria-label="Sep.sln, (File)" class="Link--primary" href="/nietras/Sep/blob/main/Sep.sln">Sep.sln</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="Sep.sln" aria-label="Sep.sln, (File)" class="Link--primary" href="/nietras/Sep/blob/main/Sep.sln">Sep.sln</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-16"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="bench.ps1" aria-label="bench.ps1, (File)" class="Link--primary" href="/nietras/Sep/blob/main/bench.ps1">bench.ps1</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="bench.ps1" aria-label="bench.ps1, (File)" class="Link--primary" href="/nietras/Sep/blob/main/bench.ps1">bench.ps1</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-17"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="codecov.yml" aria-label="codecov.yml, (File)" class="Link--primary" href="/nietras/Sep/blob/main/codecov.yml">codecov.yml</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="codecov.yml" aria-label="codecov.yml, (File)" class="Link--primary" href="/nietras/Sep/blob/main/codecov.yml">codecov.yml</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-18"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="comparison-bench.ps1" aria-label="comparison-bench.ps1, (File)" class="Link--primary" href="/nietras/Sep/blob/main/comparison-bench.ps1">comparison-bench.ps1</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="comparison-bench.ps1" aria-label="comparison-bench.ps1, (File)" class="Link--primary" href="/nietras/Sep/blob/main/comparison-bench.ps1">comparison-bench.ps1</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-19"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="global.json" aria-label="global.json, (File)" class="Link--primary" href="/nietras/Sep/blob/main/global.json">global.json</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="global.json" aria-label="global.json, (File)" class="Link--primary" href="/nietras/Sep/blob/main/global.json">global.json</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-20"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="nuget.config" aria-label="nuget.config, (File)" class="Link--primary" href="/nietras/Sep/blob/main/nuget.config">nuget.config</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="nuget.config" aria-label="nuget.config, (File)" class="Link--primary" href="/nietras/Sep/blob/main/nuget.config">nuget.config</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-21"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="pack.ps1" aria-label="pack.ps1, (File)" class="Link--primary" href="/nietras/Sep/blob/main/pack.ps1">pack.ps1</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="pack.ps1" aria-label="pack.ps1, (File)" class="Link--primary" href="/nietras/Sep/blob/main/pack.ps1">pack.ps1</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-22"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="publish-tester.ps1" aria-label="publish-tester.ps1, (File)" class="Link--primary" href="/nietras/Sep/blob/main/publish-tester.ps1">publish-tester.ps1</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="publish-tester.ps1" aria-label="publish-tester.ps1, (File)" class="Link--primary" href="/nietras/Sep/blob/main/publish-tester.ps1">publish-tester.ps1</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-23"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="rename.ps1" aria-label="rename.ps1, (File)" class="Link--primary" href="/nietras/Sep/blob/main/rename.ps1">rename.ps1</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="rename.ps1" aria-label="rename.ps1, (File)" class="Link--primary" href="/nietras/Sep/blob/main/rename.ps1">rename.ps1</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-24"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="test-parsers.ps1" aria-label="test-parsers.ps1, (File)" class="Link--primary" href="/nietras/Sep/blob/main/test-parsers.ps1">test-parsers.ps1</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="test-parsers.ps1" aria-label="test-parsers.ps1, (File)" class="Link--primary" href="/nietras/Sep/blob/main/test-parsers.ps1">test-parsers.ps1</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-25"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="test-x64-x86.ps1" aria-label="test-x64-x86.ps1, (File)" class="Link--primary" href="/nietras/Sep/blob/main/test-x64-x86.ps1">test-x64-x86.ps1</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="test-x64-x86.ps1" aria-label="test-x64-x86.ps1, (File)" class="Link--primary" href="/nietras/Sep/blob/main/test-x64-x86.ps1">test-x64-x86.ps1</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-26"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="validate-codecov.sh" aria-label="validate-codecov.sh, (File)" class="Link--primary" href="/nietras/Sep/blob/main/validate-codecov.sh">validate-codecov.sh</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="validate-codecov.sh" aria-label="validate-codecov.sh, (File)" class="Link--primary" href="/nietras/Sep/blob/main/validate-codecov.sh">validate-codecov.sh</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="Box-sc-g0xbh4-0 eNCcrz show-for-mobile" data-testid="view-all-files-row"><td colSpan="3" class="Box-sc-g0xbh4-0 bHTcCe"><div><button class="prc-Link-Link-85e08">View all files</button></div></td></tr></tbody></table></div><div class="Box-sc-g0xbh4-0 csrIcr"><div class="Box-sc-g0xbh4-0 bUQNHB"><div itemscope="" itemType="https://schema.org/abstract" class="Box-sc-g0xbh4-0 jPdcfu"><h2 class="_VisuallyHidden__VisuallyHidden-sc-11jhm7a-0 brGdpi">Repository files navigation</h2><nav class="Box-sc-g0xbh4-0 iphEWz prc-components-UnderlineWrapper-oOh5J" aria-label="Repository files"><ul class="prc-components-UnderlineItemList-b23Hf" role="list"><li class="Box-sc-g0xbh4-0 hUCRAk"><a class="prc-components-UnderlineItem-lJsg-" href="#" aria-current="page"><span data-component="icon"><svg aria-hidden="true" focusable="false" class="octicon octicon-book" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path></svg></span><span data-component="text" data-content="README">README</span></a></li><li class="Box-sc-g0xbh4-0 hUCRAk"><a class="prc-components-UnderlineItem-lJsg-" href="#"><span data-component="icon"><svg aria-hidden="true" focusable="false" class="octicon octicon-code-of-conduct" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8.048 2.241c.964-.709 2.079-1.238 3.325-1.241a4.616 4.616 0 0 1 3.282 1.355c.41.408.757.86.996 1.428.238.568.348 1.206.347 1.968 0 2.193-1.505 4.254-3.081 5.862-1.496 1.526-3.213 2.796-4.249 3.563l-.22.163a.749.749 0 0 1-.895 0l-.221-.163c-1.036-.767-2.753-2.037-4.249-3.563C1.51 10.008.007 7.952.002 5.762a4.614 4.614 0 0 1 1.353-3.407C3.123.585 6.223.537 8.048 2.24Zm-1.153.983c-1.25-1.033-3.321-.967-4.48.191a3.115 3.115 0 0 0-.913 2.335c0 1.556 1.109 3.24 2.652 4.813C5.463 11.898 6.96 13.032 8 13.805c.353-.262.758-.565 1.191-.905l-1.326-1.223a.75.75 0 0 1 1.018-1.102l1.48 1.366c.328-.281.659-.577.984-.887L9.99 9.802a.75.75 0 1 1 1.019-1.103l1.384 1.28c.295-.329.566-.661.81-.995L12.92 8.7l-1.167-1.168c-.674-.671-1.78-.664-2.474.03-.268.269-.538.537-.802.797-.893.882-2.319.843-3.185-.032-.346-.35-.693-.697-1.043-1.047a.75.75 0 0 1-.04-1.016c.162-.191.336-.401.52-.623.62-.748 1.356-1.637 2.166-2.417Zm7.112 4.442c.313-.65.491-1.293.491-1.916v-.001c0-.614-.088-1.045-.23-1.385-.143-.339-.357-.633-.673-.949a3.111 3.111 0 0 0-2.218-.915c-1.092.003-2.165.627-3.226 1.602-.823.755-1.554 1.637-2.228 2.45l-.127.154.562.566a.755.755 0 0 0 1.066.02l.794-.79c1.258-1.258 3.312-1.31 4.594-.032.396.394.792.791 1.173 1.173Z"></path></svg></span><span data-component="text" data-content="Code of conduct">Code of conduct</span></a></li><li class="Box-sc-g0xbh4-0 hUCRAk"><a class="prc-components-UnderlineItem-lJsg-" href="#"><span data-component="icon"><svg aria-hidden="true" focusable="false" class="octicon octicon-law" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"></path></svg></span><span data-component="text" data-content="MIT license">MIT license</span></a></li><li class="Box-sc-g0xbh4-0 hUCRAk"><a class="prc-components-UnderlineItem-lJsg-" href="#"><span data-component="icon"><svg aria-hidden="true" focusable="false" class="octicon octicon-law" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"></path></svg></span><span data-component="text" data-content="Security">Security</span></a></li></ul></nav><button style="--button-color:fg.subtle" type="button" aria-label="Outline" aria-haspopup="true" aria-expanded="false" tabindex="0" class="Box-sc-g0xbh4-0 cwoBXV prc-Button-ButtonBase-c50BI" data-loading="false" data-size="medium" data-variant="invisible" aria-describedby=":Rr9ab:-loading-announcement" id=":Rr9ab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-list-unordered" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.75 2.5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5ZM2 14a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm1-6a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM2 4a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg></button></div><div class="Box-sc-g0xbh4-0 QkQOb js-snippet-clipboard-copy-unpositioned undefined" data-hpc="true"><article class="markdown-body entry-content container-lg" itemprop="text"><div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">Sep - the World's Fastest .NET CSV Parser</h1><a id="user-content-sep---the-worlds-fastest-net-csv-parser" class="anchor" aria-label="Permalink: Sep - the World's Fastest .NET CSV Parser" href="#sep---the-worlds-fastest-net-csv-parser"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/b9bb980f0f94155adbf53f97b91559c9422c7ea973f2a27e7117380d5a3b20a0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6e6574382e302532306e6574392e302d3543324439313f6c6f676f3d2e4e4554266c6162656c436f6c6f723d67726179"><img src="https://camo.githubusercontent.com/b9bb980f0f94155adbf53f97b91559c9422c7ea973f2a27e7117380d5a3b20a0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6e6574382e302532306e6574392e302d3543324439313f6c6f676f3d2e4e4554266c6162656c436f6c6f723d67726179" alt=".NET" data-canonical-src="https://img.shields.io/badge/net8.0%20net9.0-5C2D91?logo=.NET&amp;labelColor=gray" style="max-width: 100%;"></a> <a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/11bdf82a13649e109492ed857d8a8a5080b77235a5a1dd1ff5b66f80abfb95c7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f432532332d31332e302d3233393132303f6c6162656c436f6c6f723d67726179"><img src="https://camo.githubusercontent.com/11bdf82a13649e109492ed857d8a8a5080b77235a5a1dd1ff5b66f80abfb95c7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f432532332d31332e302d3233393132303f6c6162656c436f6c6f723d67726179" alt="C#" data-canonical-src="https://img.shields.io/badge/C%23-13.0-239120?labelColor=gray" style="max-width: 100%;"></a> <a href="https://github.com/nietras/Sep/actions/workflows/dotnet.yml"><img src="https://github.com/nietras/Sep/actions/workflows/dotnet.yml/badge.svg?branch=main" alt="Build Status" style="max-width: 100%;"></a> <a href="https://github.com/marketplace/actions/super-linter"><img src="https://github.com/nietras/Sep/actions/workflows/super-linter.yml/badge.svg" alt="Super-Linter" style="max-width: 100%;"></a> <a href="https://codecov.io/gh/nietras/Sep" rel="nofollow"><img src="https://camo.githubusercontent.com/511865052016cf1cd5734089813acee121a0561ed562e172497cb62694ca2dd4/68747470733a2f2f636f6465636f762e696f2f67682f6e6965747261732f5365702f6272616e63682f6d61696e2f67726170682f62616467652e7376673f746f6b656e3d574e3536435233583044" alt="codecov" data-canonical-src="https://codecov.io/gh/nietras/Sep/branch/main/graph/badge.svg?token=WN56CR3X0D" style="max-width: 100%;"></a> <a href="https://github.com/nietras/Sep/actions?query=workflow%3ACodeQL"><img src="https://github.com/nietras/Sep/workflows/CodeQL/badge.svg" alt="CodeQL" style="max-width: 100%;"></a> <a href="https://www.nuget.org/packages/Sep/" rel="nofollow"><img src="https://camo.githubusercontent.com/0fa9f92f5efc32cafdf5537993a636f935daedfa3f50bcea095bc7d05c6da919/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f5365703f636f6c6f723d707572706c65" alt="Nuget" data-canonical-src="https://img.shields.io/nuget/v/Sep?color=purple" style="max-width: 100%;"></a> <a href="https://github.com/nietras/Sep/releases/"><img src="https://camo.githubusercontent.com/42e96689ad81023e00d5785d3cae1226a3fd21e504a5e49212ce93de83859f5b/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f6e6965747261732f536570" alt="Release" data-canonical-src="https://img.shields.io/github/v/release/nietras/Sep" style="max-width: 100%;"></a> <a href="https://www.nuget.org/packages/Sep" rel="nofollow"><img src="https://camo.githubusercontent.com/ae90499217ad728b4d4cc5b85365a55ae52deb548046a8f1ef0aea0e8c564518/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f536570" alt="downloads" data-canonical-src="https://img.shields.io/nuget/dt/Sep" style="max-width: 100%;"></a> <a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/e269203002bd905e1eb1902866d3dda20435e30912293be1e892df40f1e0b1b9/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7265706f2d73697a652f6e6965747261732f5365702e737667"><img src="https://camo.githubusercontent.com/e269203002bd905e1eb1902866d3dda20435e30912293be1e892df40f1e0b1b9/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7265706f2d73697a652f6e6965747261732f5365702e737667" alt="Size" data-canonical-src="https://img.shields.io/github/repo-size/nietras/Sep.svg" style="max-width: 100%;"></a> <a href="https://github.com/nietras/Sep/blob/main/LICENSE"><img src="https://camo.githubusercontent.com/11c4bea1a9da5efad7a78207e107da1ec6a3789533e92c80e191928ba817d3e8/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6e6965747261732f536570" alt="License" data-canonical-src="https://img.shields.io/github/license/nietras/Sep" style="max-width: 100%;"></a> <a href="https://nietras.com" rel="nofollow"><img src="https://camo.githubusercontent.com/ba07f9fc9b78b3221b2ffc2d676100a23b16f3a220334dbf5c6a3b6c82da49c4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f626c6f672d6e6965747261732e636f6d2d343939334444" alt="Blog" data-canonical-src="https://img.shields.io/badge/blog-nietras.com-4993DD" style="max-width: 100%;"></a> <a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/acae648b5b90e273b1ba8e653e9795f2f55b71a2cb6e5f569a89298ce10e3539/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f6e6965747261732f5365703f7374796c653d666c6174"><img src="https://camo.githubusercontent.com/acae648b5b90e273b1ba8e653e9795f2f55b71a2cb6e5f569a89298ce10e3539/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f6e6965747261732f5365703f7374796c653d666c6174" alt="GitHub Repo stars" data-canonical-src="https://img.shields.io/github/stars/nietras/Sep?style=flat" style="max-width: 100%;"></a></p> <p dir="auto">Modern, minimal, fast, zero allocation, reading and writing of separated values (<code>csv</code>, <code>tsv</code> etc.). Cross-platform, trimmable and AOT/NativeAOT compatible. Featuring an opinionated API design and pragmatic implementation targetted at machine learning use cases.</p> <p dir="auto">⭐ Please star this project if you like it. ⭐</p> <p dir="auto"><strong>🌃 Modern</strong> - utilizes features such as <a href="https://learn.microsoft.com/en-us/archive/msdn-magazine/2018/january/csharp-all-about-span-exploring-a-new-net-mainstay" rel="nofollow"><code>Span&lt;T&gt;</code></a>, <a href="https://devblogs.microsoft.com/dotnet/dotnet-7-generic-math/" rel="nofollow">Generic Math</a> (<a href="https://learn.microsoft.com/en-us/dotnet/api/system.ispanparsable-1" rel="nofollow"><code>ISpanParsable&lt;T&gt;</code></a>/ <a href="https://learn.microsoft.com/en-us/dotnet/api/system.ispanformattable" rel="nofollow"><code>ISpanFormattable</code></a>), <a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/ref-struct" rel="nofollow"><code>ref struct</code></a>, <a href="https://learn.microsoft.com/en-us/dotnet/api/system.buffers.arraypool-1" rel="nofollow"><code>ArrayPool&lt;T&gt;</code></a> and similar from <a href="https://nietras.com/2022/11/26/dotnet-and-csharp-versions/" rel="nofollow">.NET 7+ and C# 11+</a> for a modern and highly efficient implementation.</p> <p dir="auto"><strong>🔎 Minimal</strong> - a succinct yet expressive API with few options and no hidden changes to input or output. What you read/write is what you get. E.g. by default there is no "automatic" escaping/unescaping of quotes or trimming of spaces. To enable this see <a href="#sepreaderoptions">SepReaderOptions</a> and <a href="#unescaping">Unescaping</a> and <a href="#trimming">Trimming</a>. See <a href="#sepwriteroptions">SepWriterOptions</a> for <a href="#escaping">Escaping</a>.</p> <p dir="auto"><strong>🚀 Fast</strong> - blazing fast with both architecture specific and cross-platform SIMD vectorized parsing incl. 64/128/256/512-bit paths e.g. AVX2, AVX-512 (.NET 8.0+), NEON. Uses <a href="https://github.com/CarlVerret/csFastFloat">csFastFloat</a> for fast parsing of floating points. See <a href="#comparison-benchmarks">detailed benchmarks</a> for cross-platform results.</p> <p dir="auto"><strong>🌪️ Multi-threaded</strong> - unparalleled speed with highly efficient parallel CSV parsing that is <a href="#floats-reader-comparison-benchmarks">up to 35x faster than CsvHelper</a>, see <a href="#parallelenumerate-and-enumerate">ParallelEnumerate</a> and <a href="#comparison-benchmarks">benchmarks</a>.</p> <p dir="auto"><strong>🌀 Async support</strong> - efficient <code>ValueTask</code> based <code>async/await</code> support. Requires C# 13.0+ and for .NET 9.0+ includes <code>SepReader</code> implementing <code>IAsyncEnumerable&lt;&gt;</code>. See <a href="#async-support">Async Support</a> for details.</p> <p dir="auto"><strong>🗑️ Zero allocation</strong> - intelligent and efficient memory management allowing for zero allocations after warmup incl. supporting use cases of reading or writing arrays of values (e.g. features) easily without repeated allocations.</p> <p dir="auto"><strong>✅ Thorough tests</strong> - great code coverage and focus on edge case testing incl. randomized <a href="https://en.wikipedia.org/wiki/Fuzzing" rel="nofollow">fuzz testing</a>.</p> <p dir="auto"><strong>🌐 Cross-platform</strong> - works on any platform, any architecture supported by NET. 100% managed and written in beautiful modern C#.</p> <p dir="auto"><strong>✂️ Trimmable and AOT/NativeAOT compatible</strong> - no problematic reflection or dynamic code generation. Hence, fully <a href="https://learn.microsoft.com/en-us/dotnet/core/deploying/trimming/prepare-libraries-for-trimming" rel="nofollow">trimmable</a> and <a href="https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/" rel="nofollow">Ahead-of-Time</a> compatible. With a simple console tester program executable possible in just a few MBs. 💾</p> <p dir="auto"><strong>🗣️ Opinionated and pragmatic</strong> - conforms to the essentials of <a href="https://www.ietf.org/rfc/rfc4180.txt" rel="nofollow">RFC-4180</a>, but takes an opinionated and pragmatic approach towards this especially with regards to quoting and line ends. See section <a href="#rfc-4180">RFC-4180</a>.</p> <p dir="auto"><a href="#example">Example</a> | <a href="#naming-and-terminology">Naming and Terminology</a> | <a href="#application-programming-interface-api">API</a> | <a href="#limitations-and-constraints">Limitations and Constraints</a> | <a href="#comparison-benchmarks">Comparison Benchmarks</a> | <a href="#example-catalogue">Example Catalogue</a> | <a href="#rfc-4180">RFC-4180</a> | <a href="#frequently-asked-questions-faq">FAQ</a> | <a href="#public-api-reference">Public API Reference</a></p> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Example</h2><a id="user-content-example" class="anchor" aria-label="Permalink: Example" href="#example"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="var text = &quot;&quot;&quot; A;B;C;D;E;F Sep;🚀;1;1.2;0.1;0.5 CSV;✅;2;2.2;0.2;1.5 &quot;&quot;&quot;; using var reader = Sep.Reader().FromText(text); // Infers separator 'Sep' from header using var writer = reader.Spec.Writer().ToText(); // Writer defined from reader 'Spec' // Use .FromFile(...)/ToFile(...) for files var idx = reader.Header.IndexOf(&quot;B&quot;); var nms = new[] { &quot;E&quot;, &quot;F&quot; }; foreach (var readRow in reader) // Read one row at a time { var a = readRow[&quot;A&quot;].Span; // Column as ReadOnlySpan&lt;char&gt; var b = readRow[idx].ToString(); // Column to string (might be pooled) var c = readRow[&quot;C&quot;].Parse&lt;int&gt;(); // Parse any T : ISpanParsable&lt;T&gt; var d = readRow[&quot;D&quot;].Parse&lt;float&gt;(); // Parse float/double fast via csFastFloat var s = readRow[nms].Parse&lt;double&gt;(); // Parse multiple columns as Span&lt;T&gt; // - Sep handles array allocation and reuse foreach (ref var v in s) { v *= 10; } using var writeRow = writer.NewRow(); // Start new row. Row written on Dispose. writeRow[&quot;A&quot;].Set(a); // Set by ReadOnlySpan&lt;char&gt; writeRow[&quot;B&quot;].Set(b); // Set by string writeRow[&quot;C&quot;].Set($&quot;{c * 2}&quot;); // Set via InterpolatedStringHandler, no allocs writeRow[&quot;D&quot;].Format(d / 2); // Format any T : ISpanFormattable writeRow[nms].Format(s); // Format multiple columns directly // Columns are added on first access as ordered, header written when first row written } var expected = &quot;&quot;&quot; A;B;C;D;E;F Sep;🚀;2;0.6;1;5 CSV;✅;4;1.1;2;15 &quot;&quot;&quot;; // Empty line at end is for line ending, // which is always written. Assert.AreEqual(expected, writer.ToString()); // Above example code is for demonstration purposes only. // Short names and repeated constants are only for demonstration."><pre><span class="pl-k">var</span> <span class="pl-s1">text</span> <span class="pl-c1">=</span> <span class="pl-s">"""</span> <span class="pl-s"> A;B;C;D;E;F</span> <span class="pl-s"> Sep;🚀;1;1.2;0.1;0.5</span> <span class="pl-s"> CSV;✅;2;2.2;0.2;1.5</span> <span class="pl-s"> """</span><span class="pl-kos">;</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromText</span><span class="pl-kos">(</span><span class="pl-s1">text</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// Infers separator 'Sep' from header</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">writer</span> <span class="pl-c1">=</span> <span class="pl-s1">reader</span><span class="pl-kos">.</span><span class="pl-s1">Spec</span><span class="pl-kos">.</span><span class="pl-en">Writer</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">ToText</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// Writer defined from reader 'Spec'</span> <span class="pl-c">// Use .FromFile(...)/ToFile(...) for files</span> <span class="pl-k">var</span> <span class="pl-s1">idx</span> <span class="pl-c1">=</span> <span class="pl-s1">reader</span><span class="pl-kos">.</span><span class="pl-s1">Header</span><span class="pl-kos">.</span><span class="pl-en">IndexOf</span><span class="pl-kos">(</span><span class="pl-s">"B"</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">nms</span> <span class="pl-c1">=</span> <span class="pl-k">new</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-s">"E"</span><span class="pl-kos">,</span> <span class="pl-s">"F"</span> <span class="pl-kos">}</span><span class="pl-kos">;</span> <span class="pl-k">foreach</span> <span class="pl-kos">(</span><span class="pl-k">var</span> <span class="pl-s1">readRow</span> <span class="pl-k">in</span> <span class="pl-s1">reader</span><span class="pl-kos">)</span> <span class="pl-c">// Read one row at a time</span> <span class="pl-kos">{</span> <span class="pl-k">var</span> <span class="pl-s1">a</span> <span class="pl-c1">=</span> <span class="pl-s1">readRow</span><span class="pl-kos">[</span><span class="pl-s">"A"</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-s1">Span</span><span class="pl-kos">;</span> <span class="pl-c">// Column as ReadOnlySpan&lt;char&gt;</span> <span class="pl-k">var</span> <span class="pl-s1">b</span> <span class="pl-c1">=</span> <span class="pl-s1">readRow</span><span class="pl-kos">[</span><span class="pl-s1">idx</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-en">ToString</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// Column to string (might be pooled)</span> <span class="pl-k">var</span> <span class="pl-s1">c</span> <span class="pl-c1">=</span> <span class="pl-s1">readRow</span><span class="pl-kos">[</span><span class="pl-s">"C"</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-smi">Parse</span><span class="pl-c1">&lt;</span><span class="pl-smi">int</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// Parse any T : ISpanParsable&lt;T&gt;</span> <span class="pl-k">var</span> <span class="pl-s1">d</span> <span class="pl-c1">=</span> <span class="pl-s1">readRow</span><span class="pl-kos">[</span><span class="pl-s">"D"</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-smi">Parse</span><span class="pl-c1">&lt;</span><span class="pl-smi">float</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// Parse float/double fast via csFastFloat</span> <span class="pl-k">var</span> <span class="pl-s1">s</span> <span class="pl-c1">=</span> <span class="pl-s1">readRow</span><span class="pl-kos">[</span><span class="pl-s1">nms</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-smi">Parse</span><span class="pl-c1">&lt;</span><span class="pl-smi">double</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// Parse multiple columns as Span&lt;T&gt;</span> <span class="pl-c">// - Sep handles array allocation and reuse</span> <span class="pl-k">foreach</span> <span class="pl-kos">(</span><span class="pl-k">ref</span> <span class="pl-k">var</span> <span class="pl-s1">v</span> <span class="pl-k">in</span> <span class="pl-s1">s</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-s1">v</span> <span class="pl-c1">*=</span> <span class="pl-c1">10</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">writeRow</span> <span class="pl-c1">=</span> <span class="pl-s1">writer</span><span class="pl-kos">.</span><span class="pl-en">NewRow</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// Start new row. Row written on Dispose.</span> <span class="pl-s1">writeRow</span><span class="pl-kos">[</span><span class="pl-s">"A"</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-en">Set</span><span class="pl-kos">(</span><span class="pl-s1">a</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// Set by ReadOnlySpan&lt;char&gt;</span> <span class="pl-s1">writeRow</span><span class="pl-kos">[</span><span class="pl-s">"B"</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-en">Set</span><span class="pl-kos">(</span><span class="pl-s1">b</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// Set by string</span> <span class="pl-s1">writeRow</span><span class="pl-kos">[</span><span class="pl-s">"C"</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-en">Set</span><span class="pl-kos">(</span><span class="pl-s"><span class="pl-s">$</span>"<span class="pl-kos">{</span><span class="pl-s1">c</span> <span class="pl-c1">*</span> <span class="pl-c1">2</span><span class="pl-kos">}</span>"</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// Set via InterpolatedStringHandler, no allocs</span> <span class="pl-s1">writeRow</span><span class="pl-kos">[</span><span class="pl-s">"D"</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-en">Format</span><span class="pl-kos">(</span><span class="pl-s1">d</span> <span class="pl-c1">/</span> <span class="pl-c1">2</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// Format any T : ISpanFormattable</span> <span class="pl-s1">writeRow</span><span class="pl-kos">[</span><span class="pl-s1">nms</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-en">Format</span><span class="pl-kos">(</span><span class="pl-s1">s</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// Format multiple columns directly</span> <span class="pl-c">// Columns are added on first access as ordered, header written when first row written</span> <span class="pl-kos">}</span> <span class="pl-k">var</span> <span class="pl-s1">expected</span> <span class="pl-c1">=</span> <span class="pl-s">"""</span> <span class="pl-s"> A;B;C;D;E;F</span> <span class="pl-s"> Sep;🚀;2;0.6;1;5</span> <span class="pl-s"> CSV;✅;4;1.1;2;15</span> <span class="pl-s"> </span> <span class="pl-s"> """</span><span class="pl-kos">;</span> <span class="pl-c">// Empty line at end is for line ending,</span> <span class="pl-c">// which is always written.</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">AreEqual</span><span class="pl-kos">(</span><span class="pl-s1">expected</span><span class="pl-kos">,</span> <span class="pl-s1">writer</span><span class="pl-kos">.</span><span class="pl-en">ToString</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// Above example code is for demonstration purposes only.</span> <span class="pl-c">// Short names and repeated constants are only for demonstration.</span></pre></div> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Naming and Terminology</h2><a id="user-content-naming-and-terminology" class="anchor" aria-label="Permalink: Naming and Terminology" href="#naming-and-terminology"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Sep uses naming and terminology that is not based on <a href="#rfc-4180">RFC-4180</a>, but is more tailored to usage in machine learning or similar. Additionally, Sep takes a pragmatic approach towards names by using short names and abbreviations where it makes sense and there should be no ambiguity given the context. That is, using <code>Sep</code> for <code>Separator</code> and <code>Col</code> for <code>Column</code> to keep code succinct.</p> <markdown-accessiblity-table><table> <thead> <tr> <th>Term</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>Sep</code></td> <td>Short for separator, also called <em>delimiter</em>. E.g. comma (<code>,</code>) is the separator for the separated values in a <code>csv</code>-file.</td> </tr> <tr> <td><code>Header</code></td> <td>Optional first row defining names of columns.</td> </tr> <tr> <td><code>Row</code></td> <td>A row is a collection of col(umn)s, which may span multiple lines. Also called <em>record</em>.</td> </tr> <tr> <td><code>Col</code></td> <td>Short for column, also called <em>field</em>.</td> </tr> <tr> <td><code>Line</code></td> <td>Horizontal set of characters until a line ending; <code>\r\n</code>, <code>\r</code>, <code>\n</code>.</td> </tr> <tr> <td><code>Index</code></td> <td>0-based that is <code>RowIndex</code> will be 0 for first row (or the header if present).</td> </tr> <tr> <td><code>Number</code></td> <td>1-based that is <code>LineNumber</code> will be 1 for the first line (as in <code>notepad</code>). Given a row may span multiple lines a row can have a <em>From</em> line number and a <em>ToExcl</em> line number matching the C# range indexing syntax <code>[LineNumberFrom..LineNumberToExcl]</code>.</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Application Programming Interface (API)</h2><a id="user-content-application-programming-interface-api" class="anchor" aria-label="Permalink: Application Programming Interface (API)" href="#application-programming-interface-api"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Besides being the succinct name of the library, <code>Sep</code> is both the main entry point to using the library and the container for a validated separator. That is, <code>Sep</code> is basically defined as:</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="public readonly record struct Sep(char Separator);"><pre><span class="pl-k">public</span> <span class="pl-k">readonly</span> <span class="pl-k">record</span> <span class="pl-k">struct</span> <span class="pl-smi">Sep</span><span class="pl-kos">(</span><span class="pl-smi">char</span> <span class="pl-s1">Separator</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <p dir="auto">The separator <code>char</code> is validated upon construction and is guaranteed to be within a limited range and not being a <code>char</code> like <code>"</code> (quote) or similar. This can be seen in <a href="/nietras/Sep/blob/main/src/Sep/Sep.cs">src/Sep/Sep.cs</a>. The separator is constrained also for internal optimizations, so you cannot use any <code>char</code> as a separator.</p> <p dir="auto">⚠ Note that all types are within the namespace <code>nietras.SeparatedValues</code> and not <code>Sep</code> since it is problematic to have a type and a namespace with the same name.</p> <p dir="auto">To get started you can use <code>Sep</code> as the static entry point to building either a reader or writer. That is, for <code>SepReader</code>:</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="using var reader = Sep.Reader().FromFile(&quot;titanic.csv&quot;);"><pre><span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromFile</span><span class="pl-kos">(</span><span class="pl-s">"titanic.csv"</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <p dir="auto">where <code>.Reader()</code> is a convenience method corresponding to:</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="using var reader = Sep.Auto.Reader().FromFile(&quot;titanic.csv&quot;);"><pre><span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-s1">Auto</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromFile</span><span class="pl-kos">(</span><span class="pl-s">"titanic.csv"</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <p dir="auto">where <code>Sep? Auto =&gt; null;</code> is a static property that returns <code>null</code> for a nullable <code>Sep</code> to signify that the separator should be inferred from the first row, which might be a header. If the first row does not contain any of the by default supported separators or there are no rows, the default separator will be used.</p> <p dir="auto">⚠ Note Sep uses <code>;</code> as the default separator, since this is what was used in an internal proprietary library which Sep was built to replace. This is also to avoid issues with comma <code>,</code> being used as a decimal separator in some locales. Without having to resort to quoting.</p> <p dir="auto">If you want to specify the separator you can write:</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="using var reader = Sep.New(',').Reader().FromFile(&quot;titanic.csv&quot;);"><pre><span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">New</span><span class="pl-kos">(</span><span class="pl-s">','</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromFile</span><span class="pl-kos">(</span><span class="pl-s">"titanic.csv"</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <p dir="auto">or</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="var sep = new Sep(','); using var reader = sep.Reader().FromFile(&quot;titanic.csv&quot;);"><pre><span class="pl-k">var</span> <span class="pl-s1">sep</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-smi">Sep</span><span class="pl-kos">(</span><span class="pl-s">','</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromFile</span><span class="pl-kos">(</span><span class="pl-s">"titanic.csv"</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <p dir="auto">Similarly, for <code>SepWriter</code>:</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="using var writer = Sep.Writer().ToFile(&quot;titanic.csv&quot;);"><pre><span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">writer</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Writer</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">ToFile</span><span class="pl-kos">(</span><span class="pl-s">"titanic.csv"</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <p dir="auto">or</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="using var writer = Sep.New(',').Writer().ToFile(&quot;titanic.csv&quot;);"><pre><span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">writer</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">New</span><span class="pl-kos">(</span><span class="pl-s">','</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">Writer</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">ToFile</span><span class="pl-kos">(</span><span class="pl-s">"titanic.csv"</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <p dir="auto">where you have to specify a valid separator, since it cannot be inferred. To fascillitate easy flow of the separator and <code>CultureInfo</code> both <code>SepReader</code> and <code>SepWriter</code> expose a <code>Spec</code> property of type <a href="/nietras/Sep/blob/main/src/Sep/SepSpec.cs"><code>SepSpec</code></a> that simply defines those two. This means you can write:</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="using var reader = Sep.Reader().FromFile(&quot;titanic.csv&quot;); using var writer = reader.Spec.Writer().ToFile(&quot;titanic-survivors.csv&quot;);"><pre><span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromFile</span><span class="pl-kos">(</span><span class="pl-s">"titanic.csv"</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">writer</span> <span class="pl-c1">=</span> <span class="pl-s1">reader</span><span class="pl-kos">.</span><span class="pl-s1">Spec</span><span class="pl-kos">.</span><span class="pl-en">Writer</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">ToFile</span><span class="pl-kos">(</span><span class="pl-s">"titanic-survivors.csv"</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <p dir="auto">where the <code>writer</code> then will use the separator inferred by the reader, for example.</p> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">API Pattern</h3><a id="user-content-api-pattern" class="anchor" aria-label="Permalink: API Pattern" href="#api-pattern"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">In general, both reading and writing follow a similar pattern:</p> <div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="Sep/Spec =&gt; SepReaderOptions =&gt; SepReader =&gt; Row =&gt; Col(s) =&gt; Span/ToString/Parse Sep/Spec =&gt; SepWriterOptions =&gt; SepWriter =&gt; Row =&gt; Col(s) =&gt; Set/Format"><pre lang="text" class="notranslate"><code>Sep/Spec =&gt; SepReaderOptions =&gt; SepReader =&gt; Row =&gt; Col(s) =&gt; Span/ToString/Parse Sep/Spec =&gt; SepWriterOptions =&gt; SepWriter =&gt; Row =&gt; Col(s) =&gt; Set/Format </code></pre></div> <p dir="auto">where each continuation flows fluently from the preceding type. For example, <code>Reader()</code> is an extension method to <code>Sep</code> or <code>SepSpec</code> that returns a <code>SepReaderOptions</code>. Similarly, <code>Writer()</code> is an extension method to <code>Sep</code> or <code>SepSpec</code> that returns a <code>SepWriterOptions</code>.</p> <p dir="auto"><a href="/nietras/Sep/blob/main/src/Sep/SepReaderOptions.cs"><code>SepReaderOptions</code></a> and <a href="/nietras/Sep/blob/main/src/Sep/SepWriterOptions.cs"><code>SepWriterOptions</code></a> are optionally configurable. That and the APIs for reader and writer is covered in the following sections.</p> <p dir="auto">For a complete example, see the <a href="#example">example</a> above or the <a href="/nietras/Sep/blob/main/src/Sep.XyzTest/ReadMeTest.cs">ReadMeTest.cs</a>.</p> <p dir="auto">⚠ Note that it is important to understand that Sep <code>Row</code>/<code>Col</code>/<code>Cols</code> are <a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/ref-struct" rel="nofollow"><code>ref struct</code></a>s (please follow the <code>ref struct</code> link and understand how this limits the usage of those). This is due to these types being simple <em>facades</em> or indirections to the underlying reader or writer. That means you cannot use LINQ or create an array of all rows like <code>reader.ToArray()</code>. While for .NET9+ the reader is now <code>IEnumerable&lt;&gt;</code> since <code>ref struct</code>s can now be used in interfaces that have <a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-13.0/ref-struct-interfaces" rel="nofollow"><code>where T: allows ref struct</code></a> this still does not mean it is LINQ compatible. Hence, if you need store per row state or similar you need to parse or copy to different types instead. The same applies to <code>Col</code>/<code>Cols</code> which point to internal state that is also reused. This is to avoid repeated allocations for each row and get the best possible performance, while still defining a well structured and straightforward API that guides users to relevant functionality. See <a href="#why-sepreader-was-not-ienumerable-until-net-9-and-is-not-linq-compatible">Why SepReader Was Not IEnumerable Until .NET 9 and Is Not LINQ Compatible</a> for more.</p> <p dir="auto">⚠ For a full overview of public types and methods see <a href="#public-api-reference">Public API Reference</a>.</p> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">SepReader API</h3><a id="user-content-sepreader-api" class="anchor" aria-label="Permalink: SepReader API" href="#sepreader-api"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto"><code>SepReader</code> API has the following structure (in pseudo-C# code):</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="using var reader = Sep.Reader(o =&gt; o).FromFile/FromText/From...; var header = reader.Header; var _ = header.IndexOf/IndicesOf/NamesStartingWith...; foreach (var row in reader) { var _ = row[colName/colNames].Span/ToString/Parse&lt;T&gt;...; var _ = row[colIndex/colIndices].Span/ToString/Parse&lt;T&gt;...; }"><pre><span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span>o <span class="pl-c1">=&gt;</span> <span class="pl-s1">o</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-s1">FromFile</span><span class="pl-c1">/</span><span class="pl-s1">FromText</span><span class="pl-c1">/</span><span class="pl-s1">From</span>..<span class="pl-kos">.</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">header</span> <span class="pl-c1">=</span> <span class="pl-s1">reader</span><span class="pl-kos">.</span><span class="pl-s1">Header</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">_</span> <span class="pl-c1">=</span> <span class="pl-s1">header</span><span class="pl-kos">.</span><span class="pl-s1">IndexOf</span><span class="pl-c1">/</span><span class="pl-s1">IndicesOf</span><span class="pl-c1">/</span><span class="pl-s1">NamesStartingWith</span>..<span class="pl-kos">.</span><span class="pl-kos">;</span> <span class="pl-k">foreach</span> <span class="pl-kos">(</span><span class="pl-k">var</span> <span class="pl-s1">row</span> <span class="pl-k">in</span> <span class="pl-s1">reader</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">var</span> <span class="pl-s1">_</span> <span class="pl-c1">=</span> <span class="pl-s1">row</span><span class="pl-kos">[</span><span class="pl-s1">colName</span><span class="pl-c1">/</span><span class="pl-s1">colNames</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-s1">Span</span><span class="pl-c1">/</span><span class="pl-s1">ToString</span><span class="pl-c1">/</span><span class="pl-smi">Parse</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span>..<span class="pl-kos">.</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">_</span> <span class="pl-c1">=</span> <span class="pl-s1">row</span><span class="pl-kos">[</span><span class="pl-s1">colIndex</span><span class="pl-c1">/</span><span class="pl-s1">colIndices</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-s1">Span</span><span class="pl-c1">/</span><span class="pl-s1">ToString</span><span class="pl-c1">/</span><span class="pl-smi">Parse</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span>..<span class="pl-kos">.</span><span class="pl-kos">;</span> <span class="pl-kos">}</span></pre></div> <p dir="auto">That is, to use <code>SepReader</code> follow the points below:</p> <ol dir="auto"> <li>Optionally define <code>Sep</code> or use default automatically inferred separator.</li> <li>Specify reader with optional configuration of <code>SepReaderOptions</code>. For example, if a csv-file does not have a header this can be configured via: <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="Sep.Reader(o =&gt; o with { HasHeader = false })"><pre><span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span>o <span class="pl-c1">=&gt;</span> <span class="pl-s1">o</span> <span class="pl-k">with</span> <span class="pl-kos">{</span> <span class="pl-s1">HasHeader</span> <span class="pl-c1">=</span> <span class="pl-c1">false</span> <span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos"></span></pre></div> For all options see <a href="#sepreaderoptions">SepReaderOptions</a>.</li> <li>Specify source e.g. file, text (<code>string</code>), <code>TextWriter</code>, etc. via <code>From</code> extension methods.</li> <li>Optionally access the header. For example, to get all columns starting with <code>GT_</code> use: <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="var colNames = header.NamesStarting(&quot;GT_&quot;); var colIndices = header.IndicesOf(colNames);"><pre><span class="pl-k">var</span> <span class="pl-s1">colNames</span> <span class="pl-c1">=</span> <span class="pl-s1">header</span><span class="pl-kos">.</span><span class="pl-en">NamesStarting</span><span class="pl-kos">(</span><span class="pl-s">"GT_"</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">colIndices</span> <span class="pl-c1">=</span> <span class="pl-s1">header</span><span class="pl-kos">.</span><span class="pl-en">IndicesOf</span><span class="pl-kos">(</span><span class="pl-s1">colNames</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> </li> <li>Enumerate rows. One row at a time.</li> <li>Access a column by name or index. Or access multiple columns with names and indices. <code>Sep</code> internally handles pooled allocation and reuse of arrays for multiple columns.</li> <li>Use <code>Span</code> to access the column directly as a <code>ReadOnlySpan&lt;char&gt;</code>. Or use <code>ToString</code> to convert to a <code>string</code>. Or use <code>Parse&lt;T&gt;</code> where <code>T : ISpanParsable&lt;T&gt;</code> to parse the column <code>char</code>s to a specific type.</li> </ol> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">SepReaderOptions</h4><a id="user-content-sepreaderoptions" class="anchor" aria-label="Permalink: SepReaderOptions" href="#sepreaderoptions"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">The following options are available:</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="/// &lt;summary&gt; /// Specifies the separator used, if `null` then automatic detection /// is used based on first row in source. /// &lt;/summary&gt; public Sep? Sep { get; init; } = null; /// &lt;summary&gt; /// Specifies initial internal `char` buffer length. /// &lt;/summary&gt; /// &lt;remarks&gt; /// The length will likely be rounded up to the nearest power of 2. A /// smaller buffer may end up being used if the underlying source for &lt;see /// cref=&quot;System.IO.TextReader&quot;/&gt; is known to be smaller. Prefer to keep the /// default length as that has been tuned for performance and cache sizes. /// Avoid making this unnecessarily large as that will likely not improve /// performance and may waste memory. /// &lt;/remarks&gt; public int InitialBufferLength { get; init; } = SepDefaults.InitialBufferLength; /// &lt;summary&gt; /// Specifies the culture used for parsing. /// May be `null` for default culture. /// &lt;/summary&gt; public CultureInfo? CultureInfo { get; init; } = SepDefaults.CultureInfo; /// &lt;summary&gt; /// Indicates whether the first row is a header row. /// &lt;/summary&gt; public bool HasHeader { get; init; } = true; /// &lt;summary&gt; /// Specifies &lt;see cref=&quot;IEqualityComparer{T}&quot; /&gt; to use /// for comparing header column names and looking up index. /// &lt;/summary&gt; public IEqualityComparer&lt;string&gt; ColNameComparer { get; init; } = SepDefaults.ColNameComparer; /// &lt;summary&gt; /// Specifies the method factory used to convert a column span /// of `char`s to a `string`. /// &lt;/summary&gt; public SepCreateToString CreateToString { get; init; } = SepToString.Direct; /// &lt;summary&gt; /// Disables using [csFastFloat](https://github.com/CarlVerret/csFastFloat) /// for parsing `float` and `double`. /// &lt;/summary&gt; public bool DisableFastFloat { get; init; } = false; /// &lt;summary&gt; /// Disables checking if column count is the same for all rows. /// &lt;/summary&gt; public bool DisableColCountCheck { get; init; } = false; /// &lt;summary&gt; /// Disables detecting and parsing quotes. /// &lt;/summary&gt; public bool DisableQuotesParsing { get; init; } = false; /// &lt;summary&gt; /// Unescape quotes on column access. /// &lt;/summary&gt; /// &lt;remarks&gt; /// When true, if a column starts with a quote then the two outermost quotes /// are removed and every second inner quote is removed. Note that /// unquote/unescape happens in-place, which means the &lt;see /// cref=&quot;SepReader.Row.Span&quot; /&gt; will be modified and contain &quot;garbage&quot; /// state after unescaped cols before next col. This is for efficiency to /// avoid allocating secondary memory for unescaped columns. Header /// columns/names will also be unescaped. /// Requires &lt;see cref=&quot;DisableQuotesParsing&quot;/&gt; to be false. /// &lt;/remarks&gt; public bool Unescape { get; init; } = false; /// &lt;summary&gt; /// Option for trimming spaces (` ` - ASCII 32) on column access. /// &lt;/summary&gt; /// &lt;remarks&gt; /// By default no trimming is done. See &lt;see cref=&quot;SepTrim&quot;/&gt; for options. /// Note that trimming may happen in-place e.g. if also unescaping, which /// means the &lt;see cref=&quot;SepReader.Row.Span&quot; /&gt; will be modified and contain /// &quot;garbage&quot; state for trimmed/unescaped cols. This is for efficiency to /// avoid allocating secondary memory for trimmed/unescaped columns. Header /// columns/names will also be trimmed. Note that only the space ` ` (ASCII /// 32) character is trimmed, not any whitespace character. /// &lt;/remarks&gt; public SepTrim Trim { get; init; } = SepTrim.None; /// &lt;summary&gt; /// Forwarded to &lt;see /// cref=&quot;System.Threading.Tasks.ValueTask.ConfigureAwait(bool)&quot;/&gt; or /// similar when async methods are called. /// &lt;/summary&gt; public bool AsyncContinueOnCapturedContext { get; init; } = false;"><pre><span class="pl-c">/// &lt;summary&gt;</span> <span class="pl-c">/// Specifies the separator used, if `null` then automatic detection </span> <span class="pl-c">/// is used based on first row in source.</span> <span class="pl-c">/// &lt;/summary&gt;</span> <span class="pl-k">public</span> <span class="pl-smi">Sep</span><span class="pl-c1">?</span> <span class="pl-s1">Sep</span><span class="pl-kos"></span> <span class="pl-kos">{</span> <span class="pl-s1">get</span><span class="pl-kos">;</span> <span class="pl-s1">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span><span class="pl-s1"></span> <span class="pl-c1">=</span> <span class="pl-c1">null</span><span class="pl-kos">;</span> <span class="pl-c">/// &lt;summary&gt;</span> <span class="pl-c">/// Specifies initial internal `char` buffer length.</span> <span class="pl-c">/// &lt;/summary&gt;</span> <span class="pl-c">/// &lt;remarks&gt;</span> <span class="pl-c">/// The length will likely be rounded up to the nearest power of 2. A</span> <span class="pl-c">/// smaller buffer may end up being used if the underlying source for &lt;see</span> <span class="pl-c">/// cref="System.IO.TextReader"/&gt; is known to be smaller. Prefer to keep the</span> <span class="pl-c">/// default length as that has been tuned for performance and cache sizes.</span> <span class="pl-c">/// Avoid making this unnecessarily large as that will likely not improve</span> <span class="pl-c">/// performance and may waste memory.</span> <span class="pl-c">/// &lt;/remarks&gt;</span> <span class="pl-k">public</span> <span class="pl-smi">int</span> <span class="pl-s1">InitialBufferLength</span><span class="pl-kos"></span> <span class="pl-kos">{</span> <span class="pl-s1">get</span><span class="pl-kos">;</span> <span class="pl-s1">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span><span class="pl-s1"></span> <span class="pl-c1">=</span> <span class="pl-s1">SepDefaults</span><span class="pl-kos">.</span><span class="pl-s1">InitialBufferLength</span><span class="pl-kos">;</span> <span class="pl-c">/// &lt;summary&gt;</span> <span class="pl-c">/// Specifies the culture used for parsing. </span> <span class="pl-c">/// May be `null` for default culture.</span> <span class="pl-c">/// &lt;/summary&gt;</span> <span class="pl-k">public</span> <span class="pl-smi">CultureInfo</span><span class="pl-c1">?</span> <span class="pl-s1">CultureInfo</span><span class="pl-kos"></span> <span class="pl-kos">{</span> <span class="pl-s1">get</span><span class="pl-kos">;</span> <span class="pl-s1">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span><span class="pl-s1"></span> <span class="pl-c1">=</span> <span class="pl-s1">SepDefaults</span><span class="pl-kos">.</span><span class="pl-s1">CultureInfo</span><span class="pl-kos">;</span> <span class="pl-c">/// &lt;summary&gt;</span> <span class="pl-c">/// Indicates whether the first row is a header row.</span> <span class="pl-c">/// &lt;/summary&gt;</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">HasHeader</span><span class="pl-kos"></span> <span class="pl-kos">{</span> <span class="pl-s1">get</span><span class="pl-kos">;</span> <span class="pl-s1">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span><span class="pl-s1"></span> <span class="pl-c1">=</span> <span class="pl-c1">true</span><span class="pl-kos">;</span> <span class="pl-c">/// &lt;summary&gt;</span> <span class="pl-c">/// Specifies &lt;see cref="IEqualityComparer{T}" /&gt; to use </span> <span class="pl-c">/// for comparing header column names and looking up index.</span> <span class="pl-c">/// &lt;/summary&gt;</span> <span class="pl-k">public</span> <span class="pl-smi">IEqualityComparer</span><span class="pl-c1">&lt;</span><span class="pl-smi">string</span><span class="pl-c1">&gt;</span> <span class="pl-s1">ColNameComparer</span><span class="pl-kos"></span> <span class="pl-kos">{</span> <span class="pl-s1">get</span><span class="pl-kos">;</span> <span class="pl-s1">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span><span class="pl-s1"></span> <span class="pl-c1">=</span> <span class="pl-s1">SepDefaults</span><span class="pl-kos">.</span><span class="pl-s1">ColNameComparer</span><span class="pl-kos">;</span> <span class="pl-c">/// &lt;summary&gt;</span> <span class="pl-c">/// Specifies the method factory used to convert a column span </span> <span class="pl-c">/// of `char`s to a `string`.</span> <span class="pl-c">/// &lt;/summary&gt;</span> <span class="pl-k">public</span> <span class="pl-smi">SepCreateToString</span> <span class="pl-s1">CreateToString</span><span class="pl-kos"></span> <span class="pl-kos">{</span> <span class="pl-s1">get</span><span class="pl-kos">;</span> <span class="pl-s1">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span><span class="pl-s1"></span> <span class="pl-c1">=</span> <span class="pl-s1">SepToString</span><span class="pl-kos">.</span><span class="pl-s1">Direct</span><span class="pl-kos">;</span> <span class="pl-c">/// &lt;summary&gt;</span> <span class="pl-c">/// Disables using [csFastFloat](https://github.com/CarlVerret/csFastFloat)</span> <span class="pl-c">/// for parsing `float` and `double`.</span> <span class="pl-c">/// &lt;/summary&gt;</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">DisableFastFloat</span><span class="pl-kos"></span> <span class="pl-kos">{</span> <span class="pl-s1">get</span><span class="pl-kos">;</span> <span class="pl-s1">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span><span class="pl-s1"></span> <span class="pl-c1">=</span> <span class="pl-c1">false</span><span class="pl-kos">;</span> <span class="pl-c">/// &lt;summary&gt;</span> <span class="pl-c">/// Disables checking if column count is the same for all rows.</span> <span class="pl-c">/// &lt;/summary&gt;</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">DisableColCountCheck</span><span class="pl-kos"></span> <span class="pl-kos">{</span> <span class="pl-s1">get</span><span class="pl-kos">;</span> <span class="pl-s1">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span><span class="pl-s1"></span> <span class="pl-c1">=</span> <span class="pl-c1">false</span><span class="pl-kos">;</span> <span class="pl-c">/// &lt;summary&gt;</span> <span class="pl-c">/// Disables detecting and parsing quotes.</span> <span class="pl-c">/// &lt;/summary&gt;</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">DisableQuotesParsing</span><span class="pl-kos"></span> <span class="pl-kos">{</span> <span class="pl-s1">get</span><span class="pl-kos">;</span> <span class="pl-s1">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span><span class="pl-s1"></span> <span class="pl-c1">=</span> <span class="pl-c1">false</span><span class="pl-kos">;</span> <span class="pl-c">/// &lt;summary&gt;</span> <span class="pl-c">/// Unescape quotes on column access.</span> <span class="pl-c">/// &lt;/summary&gt;</span> <span class="pl-c">/// &lt;remarks&gt;</span> <span class="pl-c">/// When true, if a column starts with a quote then the two outermost quotes</span> <span class="pl-c">/// are removed and every second inner quote is removed. Note that</span> <span class="pl-c">/// unquote/unescape happens in-place, which means the &lt;see</span> <span class="pl-c">/// cref="SepReader.Row.Span" /&gt; will be modified and contain "garbage"</span> <span class="pl-c">/// state after unescaped cols before next col. This is for efficiency to</span> <span class="pl-c">/// avoid allocating secondary memory for unescaped columns. Header</span> <span class="pl-c">/// columns/names will also be unescaped.</span> <span class="pl-c">/// Requires &lt;see cref="DisableQuotesParsing"/&gt; to be false.</span> <span class="pl-c">/// &lt;/remarks&gt;</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">Unescape</span><span class="pl-kos"></span> <span class="pl-kos">{</span> <span class="pl-s1">get</span><span class="pl-kos">;</span> <span class="pl-s1">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span><span class="pl-s1"></span> <span class="pl-c1">=</span> <span class="pl-c1">false</span><span class="pl-kos">;</span> <span class="pl-c">/// &lt;summary&gt;</span> <span class="pl-c">/// Option for trimming spaces (` ` - ASCII 32) on column access.</span> <span class="pl-c">/// &lt;/summary&gt;</span> <span class="pl-c">/// &lt;remarks&gt;</span> <span class="pl-c">/// By default no trimming is done. See &lt;see cref="SepTrim"/&gt; for options.</span> <span class="pl-c">/// Note that trimming may happen in-place e.g. if also unescaping, which</span> <span class="pl-c">/// means the &lt;see cref="SepReader.Row.Span" /&gt; will be modified and contain</span> <span class="pl-c">/// "garbage" state for trimmed/unescaped cols. This is for efficiency to</span> <span class="pl-c">/// avoid allocating secondary memory for trimmed/unescaped columns. Header</span> <span class="pl-c">/// columns/names will also be trimmed. Note that only the space ` ` (ASCII</span> <span class="pl-c">/// 32) character is trimmed, not any whitespace character.</span> <span class="pl-c">/// &lt;/remarks&gt;</span> <span class="pl-k">public</span> <span class="pl-smi">SepTrim</span> <span class="pl-s1">Trim</span><span class="pl-kos"></span> <span class="pl-kos">{</span> <span class="pl-s1">get</span><span class="pl-kos">;</span> <span class="pl-s1">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span><span class="pl-s1"></span> <span class="pl-c1">=</span> <span class="pl-s1">SepTrim</span><span class="pl-kos">.</span><span class="pl-s1">None</span><span class="pl-kos">;</span> <span class="pl-c">/// &lt;summary&gt;</span> <span class="pl-c">/// Forwarded to &lt;see</span> <span class="pl-c">/// cref="System.Threading.Tasks.ValueTask.ConfigureAwait(bool)"/&gt; or</span> <span class="pl-c">/// similar when async methods are called.</span> <span class="pl-c">/// &lt;/summary&gt;</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">AsyncContinueOnCapturedContext</span><span class="pl-kos"></span> <span class="pl-kos">{</span> <span class="pl-s1">get</span><span class="pl-kos">;</span> <span class="pl-s1">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span><span class="pl-s1"></span> <span class="pl-c1">=</span> <span class="pl-c1">false</span><span class="pl-kos">;</span></pre></div> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Unescaping</h4><a id="user-content-unescaping" class="anchor" aria-label="Permalink: Unescaping" href="#unescaping"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">While great care has been taken to ensure Sep unescaping of quotes is both correct and fast, there is always the question of how does one respond to invalid input.</p> <p dir="auto">The below table tries to summarize the behavior of Sep vs CsvHelper and Sylvan. Note that all do the same for valid input. There are differences for how invalid input is handled. For Sep the design choice has been based on not wanting to throw exceptions and to use a principle that is both reasonably fast and simple.</p> <markdown-accessiblity-table><table> <thead> <tr> <th>Input</th> <th>Valid</th> <th>CsvHelper</th> <th>CsvHelper¹</th> <th>Sylvan</th> <th>Sep²</th> </tr> </thead> <tbody> <tr> <td><code>a</code></td> <td>True</td> <td><code>a</code></td> <td><code>a</code></td> <td><code>a</code></td> <td><code>a</code></td> </tr> <tr> <td><code>""</code></td> <td>True</td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td><code>""""</code></td> <td>True</td> <td><code>"</code></td> <td><code>"</code></td> <td><code>"</code></td> <td><code>"</code></td> </tr> <tr> <td><code>""""""</code></td> <td>True</td> <td><code>""</code></td> <td><code>""</code></td> <td><code>""</code></td> <td><code>""</code></td> </tr> <tr> <td><code>"a"</code></td> <td>True</td> <td><code>a</code></td> <td><code>a</code></td> <td><code>a</code></td> <td><code>a</code></td> </tr> <tr> <td><code>"a""a"</code></td> <td>True</td> <td><code>a"a</code></td> <td><code>a"a</code></td> <td><code>a"a</code></td> <td><code>a"a</code></td> </tr> <tr> <td><code>"a""a""a"</code></td> <td>True</td> <td><code>a"a"a</code></td> <td><code>a"a"a</code></td> <td><code>a"a"a</code></td> <td><code>a"a"a</code></td> </tr> <tr> <td><code>a""a</code></td> <td>False</td> <td>EXCEPTION</td> <td><code>a""a</code></td> <td><code>a""a</code></td> <td><code>a""a</code></td> </tr> <tr> <td><code>a"a"a</code></td> <td>False</td> <td>EXCEPTION</td> <td><code>a"a"a</code></td> <td><code>a"a"a</code></td> <td><code>a"a"a</code></td> </tr> <tr> <td><code>·""·</code></td> <td>False</td> <td>EXCEPTION</td> <td><code>·""·</code></td> <td><code>·""·</code></td> <td><code>·""·</code></td> </tr> <tr> <td><code>·"a"·</code></td> <td>False</td> <td>EXCEPTION</td> <td><code>·"a"·</code></td> <td><code>·"a"·</code></td> <td><code>·"a"·</code></td> </tr> <tr> <td><code>·""</code></td> <td>False</td> <td>EXCEPTION</td> <td><code>·""</code></td> <td><code>·""</code></td> <td><code>·""</code></td> </tr> <tr> <td><code>·"a"</code></td> <td>False</td> <td>EXCEPTION</td> <td><code>·"a"</code></td> <td><code>·"a"</code></td> <td><code>·"a"</code></td> </tr> <tr> <td><code>a"""a</code></td> <td>False</td> <td>EXCEPTION</td> <td><code>a"""a</code></td> <td><code>a"""a</code></td> <td><code>a"""a</code></td> </tr> <tr> <td><code>"a"a"a"</code></td> <td>False</td> <td>EXCEPTION</td> <td><code>aa"a"</code></td> <td><code>a"a"a</code></td> <td><code>aa"a</code></td> </tr> <tr> <td><code>""·</code></td> <td>False</td> <td>EXCEPTION</td> <td><code>·</code></td> <td><code>"</code></td> <td><code>·</code></td> </tr> <tr> <td><code>"a"·</code></td> <td>False</td> <td>EXCEPTION</td> <td><code>a·</code></td> <td><code>a"</code></td> <td><code>a·</code></td> </tr> <tr> <td><code>"a"""a</code></td> <td>False</td> <td>EXCEPTION</td> <td><code>aa</code></td> <td>EXCEPTION</td> <td><code>a"a</code></td> </tr> <tr> <td><code>"a"""a"</code></td> <td>False</td> <td>EXCEPTION</td> <td><code>aa"</code></td> <td><code>a"a&lt;NULL&gt;</code></td> <td><code>a"a"</code></td> </tr> <tr> <td><code>""a"</code></td> <td>False</td> <td>EXCEPTION</td> <td><code>a"</code></td> <td><code>"a</code></td> <td><code>a"</code></td> </tr> <tr> <td><code>"a"a"</code></td> <td>False</td> <td>EXCEPTION</td> <td><code>aa"</code></td> <td><code>a"a</code></td> <td><code>aa"</code></td> </tr> <tr> <td><code>""a"a""</code></td> <td>False</td> <td>EXCEPTION</td> <td><code>a"a""</code></td> <td><code>"a"a"</code></td> <td><code>a"a"</code></td> </tr> <tr> <td><code>"""</code></td> <td>False</td> <td></td> <td></td> <td>EXCEPTION</td> <td><code>"</code></td> </tr> <tr> <td><code>"""""</code></td> <td>False</td> <td><code>"</code></td> <td><code>"</code></td> <td>EXCEPTION</td> <td><code>""</code></td> </tr> </tbody> </table></markdown-accessiblity-table> <p dir="auto"><code>·</code> (middle dot) is whitespace to make this visible</p> <p dir="auto">¹ CsvHelper with <code>BadDataFound = null</code></p> <p dir="auto">² Sep with <code>Unescape = true</code> in <code>SepReaderOptions</code></p> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Trimming</h4><a id="user-content-trimming" class="anchor" aria-label="Permalink: Trimming" href="#trimming"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Sep supports trimming by the <a href="/nietras/Sep/blob/main/src/Sep/SepTrim.cs"><code>SepTrim</code></a> flags enum, which has two options as documented there. Below the result of both trimming and unescaping is shown in comparison to CsvHelper. Note unescaping is enabled for all results shown. It is possible to trim without unescaping too, of course.</p> <p dir="auto">As can be seen Sep supports a simple principle of trimming <em>before</em> and <em>after</em> unescaping with trimming before unescaping being important for unescaping if there is a starting quote after spaces.</p> <markdown-accessiblity-table><table> <thead> <tr> <th>Input</th> <th>CsvHelper Trim</th> <th>CsvHelper InsideQuotes</th> <th>CsvHelper All¹</th> <th>Sep Outer</th> <th>Sep AfterUnescape</th> <th>Sep All²</th> </tr> </thead> <tbody> <tr> <td><code>a</code></td> <td><code>a</code></td> <td><code>a</code></td> <td><code>a</code></td> <td><code>a</code></td> <td><code>a</code></td> <td><code>a</code></td> </tr> <tr> <td><code>·a</code></td> <td><code>a</code></td> <td><code>·a</code></td> <td><code>a</code></td> <td><code>a</code></td> <td><code>a</code></td> <td><code>a</code></td> </tr> <tr> <td><code>a·</code></td> <td><code>a</code></td> <td><code>a·</code></td> <td><code>a</code></td> <td><code>a</code></td> <td><code>a</code></td> <td><code>a</code></td> </tr> <tr> <td><code>·a·</code></td> <td><code>a</code></td> <td><code>·a·</code></td> <td><code>a</code></td> <td><code>a</code></td> <td><code>a</code></td> <td><code>a</code></td> </tr> <tr> <td><code>·a·a·</code></td> <td><code>a·a</code></td> <td><code>·a·a·</code></td> <td><code>a·a</code></td> <td><code>a·a</code></td> <td><code>a·a</code></td> <td><code>a·a</code></td> </tr> <tr> <td><code>"a"</code></td> <td><code>a</code></td> <td><code>a</code></td> <td><code>a</code></td> <td><code>a</code></td> <td><code>a</code></td> <td><code>a</code></td> </tr> <tr> <td><code>"·a"</code></td> <td><code>·a</code></td> <td><code>a</code></td> <td><code>a</code></td> <td><code>·a</code></td> <td><code>a</code></td> <td><code>a</code></td> </tr> <tr> <td><code>"a·"</code></td> <td><code>a·</code></td> <td><code>a</code></td> <td><code>a</code></td> <td><code>a·</code></td> <td><code>a</code></td> <td><code>a</code></td> </tr> <tr> <td><code>"·a·"</code></td> <td><code>·a·</code></td> <td><code>a</code></td> <td><code>a</code></td> <td><code>·a·</code></td> <td><code>a</code></td> <td><code>a</code></td> </tr> <tr> <td><code>"·a·a·"</code></td> <td><code>·a·a·</code></td> <td><code>a·a</code></td> <td><code>a·a</code></td> <td><code>·a·a·</code></td> <td><code>a·a</code></td> <td><code>a·a</code></td> </tr> <tr> <td><code>·"a"·</code></td> <td><code>a</code></td> <td><code>·"a"·</code></td> <td><code>a</code></td> <td><code>a</code></td> <td><code>"a"</code></td> <td><code>a</code></td> </tr> <tr> <td><code>·"·a"·</code></td> <td><code>·a</code></td> <td><code>·"·a"·</code></td> <td><code>a</code></td> <td><code>·a</code></td> <td><code>"·a"</code></td> <td><code>a</code></td> </tr> <tr> <td><code>·"a·"·</code></td> <td><code>a·</code></td> <td><code>·"a·"·</code></td> <td><code>a</code></td> <td><code>a·</code></td> <td><code>"a·"</code></td> <td><code>a</code></td> </tr> <tr> <td><code>·"·a·"·</code></td> <td><code>·a·</code></td> <td><code>·"·a·"·</code></td> <td><code>a</code></td> <td><code>·a·</code></td> <td><code>"·a·"</code></td> <td><code>a</code></td> </tr> <tr> <td><code>·"·a·a·"·</code></td> <td><code>·a·a·</code></td> <td><code>·"·a·a·"·</code></td> <td><code>a·a</code></td> <td><code>·a·a·</code></td> <td><code>"·a·a·"</code></td> <td><code>a·a</code></td> </tr> </tbody> </table></markdown-accessiblity-table> <p dir="auto"><code>·</code> (middle dot) is whitespace to make this visible</p> <p dir="auto">¹ CsvHelper with <code>TrimOptions.Trim | TrimOptions.InsideQuotes</code></p> <p dir="auto">² Sep with <code>SepTrim.All = SepTrim.Outer | SepTrim.AfterUnescape</code> in <code>SepReaderOptions</code></p> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">SepReader Debuggability</h4><a id="user-content-sepreader-debuggability" class="anchor" aria-label="Permalink: SepReader Debuggability" href="#sepreader-debuggability"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Debuggability is an important part of any library and while this is still a work in progress for Sep, <code>SepReader</code> does have a unique feature when looking at it and it's row or cols in a debug context. Given the below example code:</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="var text = &quot;&quot;&quot; Key;Value A;&quot;1 2 3&quot; B;&quot;Apple Banana Orange Pear&quot; &quot;&quot;&quot;; using var reader = Sep.Reader().FromText(text); foreach (var row in reader) { // Hover over reader, row or col when breaking here var col = row[1]; if (Debugger.IsAttached &amp;&amp; row.RowIndex == 2) { Debugger.Break(); } Debug.WriteLine(col.ToString()); }"><pre><span class="pl-k">var</span> <span class="pl-s1">text</span> <span class="pl-c1">=</span> <span class="pl-s">"""</span> <span class="pl-s"> Key;Value</span> <span class="pl-s"> A;"1</span> <span class="pl-s"> 2</span> <span class="pl-s"> 3"</span> <span class="pl-s"> B;"Apple</span> <span class="pl-s"> Banana</span> <span class="pl-s"> Orange</span> <span class="pl-s"> Pear"</span> <span class="pl-s"> """</span><span class="pl-kos">;</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromText</span><span class="pl-kos">(</span><span class="pl-s1">text</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">foreach</span> <span class="pl-kos">(</span><span class="pl-k">var</span> <span class="pl-s1">row</span> <span class="pl-k">in</span> <span class="pl-s1">reader</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-c">// Hover over reader, row or col when breaking here</span> <span class="pl-k">var</span> <span class="pl-s1">col</span> <span class="pl-c1">=</span> <span class="pl-s1">row</span><span class="pl-kos">[</span><span class="pl-c1">1</span><span class="pl-kos">]</span><span class="pl-kos">;</span> <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">Debugger</span><span class="pl-kos">.</span><span class="pl-s1">IsAttached</span> <span class="pl-c1">&amp;&amp;</span> <span class="pl-s1">row</span><span class="pl-kos">.</span><span class="pl-s1">RowIndex</span> <span class="pl-c1">==</span> <span class="pl-c1">2</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-s1">Debugger</span><span class="pl-kos">.</span><span class="pl-en">Break</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-s1">Debug</span><span class="pl-kos">.</span><span class="pl-en">WriteLine</span><span class="pl-kos">(</span><span class="pl-s1">col</span><span class="pl-kos">.</span><span class="pl-en">ToString</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-kos">}</span></pre></div> <p dir="auto">and you are hovering over <code>reader</code> when the break is triggered then this will show something like:</p> <div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="String Length=55"><pre lang="text" class="notranslate"><code>String Length=55 </code></pre></div> <p dir="auto">That is, it will show information of the source for the reader, in this case a string of length 55.</p> <div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">SepReader.Row Debuggability</h5><a id="user-content-sepreaderrow-debuggability" class="anchor" aria-label="Permalink: SepReader.Row Debuggability" href="#sepreaderrow-debuggability"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">If you are hovering over <code>row</code> then this will show something like:</p> <div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content=" 2:[5..9] = &quot;B;\&quot;Apple\r\nBanana\r\nOrange\r\nPear\&quot;&quot;"><pre lang="text" class="notranslate"><code> 2:[5..9] = "B;\"Apple\r\nBanana\r\nOrange\r\nPear\"" </code></pre></div> <p dir="auto">This has the format shown below.</p> <div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="&lt;ROWINDEX&gt;:[&lt;LINENUMBERRANGE&gt;] = &quot;&lt;ROW&gt;&quot;"><pre lang="text" class="notranslate"><code>&lt;ROWINDEX&gt;:[&lt;LINENUMBERRANGE&gt;] = "&lt;ROW&gt;" </code></pre></div> <p dir="auto">Note how this shows line number range <code>[FromIncl..ToExcl]</code>, as in C# <a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-8.0/ranges#systemrange" rel="nofollow">range expression</a>, so that one can easily find the row in question in <code>notepad</code> or similar. This means Sep has to track line endings inside quotes and is an example of a feature that makes Sep a bit slower but which is a price considered worth paying.</p> <blockquote> <p dir="auto">GitHub doesn't show line numbers in code blocks so consider copying the example text to notepad or similar to see the effect.</p> </blockquote> <p dir="auto">Additionally, if you expand the <code>row</code> in the debugger (e.g. via the small triangle) you will see each column of the row similar to below.</p> <div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="00:'Key' = &quot;B&quot; 01:'Value' = &quot;\&quot;Apple\r\nBanana\r\nOrange\r\nPear\&quot;&quot;"><pre lang="text" class="notranslate"><code>00:'Key' = "B" 01:'Value' = "\"Apple\r\nBanana\r\nOrange\r\nPear\"" </code></pre></div> <div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">SepReader.Col Debuggability</h5><a id="user-content-sepreadercol-debuggability" class="anchor" aria-label="Permalink: SepReader.Col Debuggability" href="#sepreadercol-debuggability"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">If you hover over <code>col</code> you should see:</p> <div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="&quot;\&quot;Apple\r\nBanana\r\nOrange\r\nPear\&quot;&quot;"><pre lang="text" class="notranslate"><code>"\"Apple\r\nBanana\r\nOrange\r\nPear\"" </code></pre></div> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Why SepReader Was Not IEnumerable Until .NET 9 and Is Not LINQ Compatible</h4><a id="user-content-why-sepreader-was-not-ienumerable-until-net-9-and-is-not-linq-compatible" class="anchor" aria-label="Permalink: Why SepReader Was Not IEnumerable Until .NET 9 and Is Not LINQ Compatible" href="#why-sepreader-was-not-ienumerable-until-net-9-and-is-not-linq-compatible"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">As mentioned earlier Sep only allows enumeration and access to one row at a time and <code>SepReader.Row</code> is just a simple <em>facade</em> or indirection to the underlying reader. This is why it is defined as a <code>ref struct</code>. In fact, the following code:</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="using var reader = Sep.Reader().FromText(text); foreach (var row in reader) { }"><pre><span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromText</span><span class="pl-kos">(</span><span class="pl-s1">text</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">foreach</span> <span class="pl-kos">(</span><span class="pl-k">var</span> <span class="pl-s1">row</span> <span class="pl-k">in</span> <span class="pl-s1">reader</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span></pre></div> <p dir="auto">can also be rewritten as:</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="using var reader = Sep.Reader().FromText(text); while (reader.MoveNext()) { var row = reader.Current; }"><pre><span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromText</span><span class="pl-kos">(</span><span class="pl-s1">text</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">while</span> <span class="pl-kos">(</span><span class="pl-s1">reader</span><span class="pl-kos">.</span><span class="pl-en">MoveNext</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">var</span> <span class="pl-s1">row</span> <span class="pl-c1">=</span> <span class="pl-s1">reader</span><span class="pl-kos">.</span><span class="pl-s1">Current</span><span class="pl-kos">;</span> <span class="pl-kos">}</span></pre></div> <p dir="auto">where <code>row</code> is just a <em>facade</em> for exposing row specific functionality. That is, <code>row</code> is still basically the <code>reader</code> underneath. Hence, let's look at using LINQ with <code>SepReader</code> implementing <code>IEnumerable&lt;SepReader.Row&gt;</code> and the <code>Row</code> <em>not</em> being a <code>ref struct</code>. Then, you would be able to write something like below:</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="using var reader = Sep.Reader().FromText(text); SepReader.Row[] rows = reader.ToArray();"><pre><span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromText</span><span class="pl-kos">(</span><span class="pl-s1">text</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Row</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-s1">rows</span> <span class="pl-c1">=</span> <span class="pl-s1">reader</span><span class="pl-kos">.</span><span class="pl-en">ToArray</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <p dir="auto">Given <code>Row</code> is just a facade for the reader, this would be equivalent to writing:</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="using var reader = Sep.Reader().FromText(text); SepReader[] rows = reader.ToArray();"><pre><span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromText</span><span class="pl-kos">(</span><span class="pl-s1">text</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-smi">SepReader</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-s1">rows</span> <span class="pl-c1">=</span> <span class="pl-s1">reader</span><span class="pl-kos">.</span><span class="pl-en">ToArray</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <p dir="auto">which hopefully makes it clear why this is not a good thing. The array would effectively be the reader repeated several times. If this would have to be supported one would have to allocate memory for each row always, which would basically be no different than a <code>ReadLine</code> approach as benchmarked in <a href="#comparison-benchmarks">Comparison Benchmarks</a>.</p> <p dir="auto">This is perhaps also the reason why no other efficient .NET CSV parser (known to author) implements an API pattern like Sep, but instead let the reader define all functionality directly and hence only let's you access the current row and cols on that. This API, however, is in this authors opinion not ideal and can be a bit confusing, which is why Sep is designed like it is. The downside is the above caveat.</p> <p dir="auto">The main culprit above is that for example <code>ToArray()</code> would store a <code>ref struct</code> in a heap allocated array, the actual enumeration is not a problem and hence implementing <code>IEnumerable&lt;SepReader.Row&gt;</code> is not the problem as such. The problem was that prior to .NET 9 it was not possible to implement this interface with <code>T</code> being a <code>ref struct</code>, but with C# 13 <code>allows ref struct</code> and .NET 9 having annotated such interfaces it is now possible and you can assign <code>SepReader</code> to <code>IEnumerable</code>, but most if not all of LINQ will still not work as shown below.</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="var text = &quot;&quot;&quot; Key;Value A;1.1 B;2.2 &quot;&quot;&quot;; using var reader = Sep.Reader().FromText(text); IEnumerable&lt;SepReader.Row&gt; enumerable = reader; // Currently, most LINQ methods do not work for ref types. See below. // // The type 'SepReader.Row' may not be a ref struct or a type parameter // allowing ref structs in order to use it as parameter 'TSource' in the // generic type or method 'Enumerable.Select&lt;TSource, // TResult&gt;(IEnumerable&lt;TSource&gt;, Func&lt;TSource, TResult&gt;)' // // enumerable.Select(row =&gt; row[&quot;Key&quot;].ToString()).ToArray();"><pre><span class="pl-k">var</span> <span class="pl-s1">text</span> <span class="pl-c1">=</span> <span class="pl-s">"""</span> <span class="pl-s"> Key;Value</span> <span class="pl-s"> A;1.1</span> <span class="pl-s"> B;2.2</span> <span class="pl-s"> """</span><span class="pl-kos">;</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromText</span><span class="pl-kos">(</span><span class="pl-s1">text</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-smi">IEnumerable</span><span class="pl-c1">&lt;</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Row</span><span class="pl-c1">&gt;</span> <span class="pl-s1">enumerable</span> <span class="pl-c1">=</span> <span class="pl-s1">reader</span><span class="pl-kos">;</span> <span class="pl-c">// Currently, most LINQ methods do not work for ref types. See below.</span> <span class="pl-c">//</span> <span class="pl-c">// The type 'SepReader.Row' may not be a ref struct or a type parameter</span> <span class="pl-c">// allowing ref structs in order to use it as parameter 'TSource' in the</span> <span class="pl-c">// generic type or method 'Enumerable.Select&lt;TSource,</span> <span class="pl-c">// TResult&gt;(IEnumerable&lt;TSource&gt;, Func&lt;TSource, TResult&gt;)'</span> <span class="pl-c">//</span> <span class="pl-c">// enumerable.Select(row =&gt; row["Key"].ToString()).ToArray();</span></pre></div> <p dir="auto">Calling <code>Select</code> should in principle be possible if this was annotated with <code>allows ref struct</code>, but it isn't currently.</p> <p dir="auto">If you want to use LINQ or similar you have to first parse or transform the rows into some other type and enumerate it. This is easy to do and instead of counting lines you should focus on how such enumeration can be easily expressed using C# iterators (aka <code>yield return</code>). With local functions this can be done inside a method like:</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="var text = &quot;&quot;&quot; Key;Value A;1.1 B;2.2 &quot;&quot;&quot;; var expected = new (string Key, double Value)[] { (&quot;A&quot;, 1.1), (&quot;B&quot;, 2.2), }; using var reader = Sep.Reader().FromText(text); var actual = Enumerate(reader).ToArray(); CollectionAssert.AreEqual(expected, actual); static IEnumerable&lt;(string Key, double Value)&gt; Enumerate(SepReader reader) { foreach (var row in reader) { yield return (row[&quot;Key&quot;].ToString(), row[&quot;Value&quot;].Parse&lt;double&gt;()); } }"><pre><span class="pl-k">var</span> <span class="pl-s1">text</span> <span class="pl-c1">=</span> <span class="pl-s">"""</span> <span class="pl-s"> Key;Value</span> <span class="pl-s"> A;1.1</span> <span class="pl-s"> B;2.2</span> <span class="pl-s"> """</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">expected</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-kos">(</span><span class="pl-smi">string</span> <span class="pl-s1">Key</span><span class="pl-kos">,</span> <span class="pl-smi">double</span> <span class="pl-s1">Value</span><span class="pl-kos">)</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-kos">(</span><span class="pl-s">"A"</span><span class="pl-kos">,</span> <span class="pl-c1">1.1</span><span class="pl-kos">)</span><span class="pl-kos">,</span> <span class="pl-kos">(</span><span class="pl-s">"B"</span><span class="pl-kos">,</span> <span class="pl-c1">2.2</span><span class="pl-kos">)</span><span class="pl-kos">,</span> <span class="pl-kos">}</span><span class="pl-kos">;</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromText</span><span class="pl-kos">(</span><span class="pl-s1">text</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">actual</span> <span class="pl-c1">=</span> <span class="pl-s1">Enumerate</span><span class="pl-kos">(</span><span class="pl-s1">reader</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">ToArray</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">CollectionAssert</span><span class="pl-kos">.</span><span class="pl-en">AreEqual</span><span class="pl-kos">(</span><span class="pl-s1">expected</span><span class="pl-kos">,</span> <span class="pl-s1">actual</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-smi">IEnumerable</span><span class="pl-c1">&lt;</span><span class="pl-kos">(</span><span class="pl-smi">string</span> <span class="pl-s1">Key</span><span class="pl-kos">,</span> <span class="pl-smi">double</span> <span class="pl-s1">Value</span><span class="pl-kos">)</span><span class="pl-c1">&gt;</span> <span class="pl-en">Enumerate</span><span class="pl-kos">(</span><span class="pl-smi">SepReader</span> <span class="pl-s1">reader</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">foreach</span> <span class="pl-kos">(</span><span class="pl-k">var</span> <span class="pl-s1">row</span> <span class="pl-k">in</span> <span class="pl-s1">reader</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">yield</span> <span class="pl-k">return</span> <span class="pl-kos">(</span><span class="pl-s1">row</span><span class="pl-kos">[</span><span class="pl-s">"Key"</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-en">ToString</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">,</span> <span class="pl-s1">row</span><span class="pl-kos">[</span><span class="pl-s">"Value"</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-smi">Parse</span><span class="pl-c1">&lt;</span><span class="pl-smi">double</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span></pre></div> <p dir="auto">Now if instead refactoring this to something LINQ-compatible by defining a common <code>Enumerate</code> or similar method it could be:</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="var text = &quot;&quot;&quot; Key;Value A;1.1 B;2.2 &quot;&quot;&quot;; var expected = new (string Key, double Value)[] { (&quot;A&quot;, 1.1), (&quot;B&quot;, 2.2), }; using var reader = Sep.Reader().FromText(text); var actual = Enumerate(reader, row =&gt; (row[&quot;Key&quot;].ToString(), row[&quot;Value&quot;].Parse&lt;double&gt;())) .ToArray(); CollectionAssert.AreEqual(expected, actual); static IEnumerable&lt;T&gt; Enumerate&lt;T&gt;(SepReader reader, SepReader.RowFunc&lt;T&gt; select) { foreach (var row in reader) { yield return select(row); } }"><pre><span class="pl-k">var</span> <span class="pl-s1">text</span> <span class="pl-c1">=</span> <span class="pl-s">"""</span> <span class="pl-s"> Key;Value</span> <span class="pl-s"> A;1.1</span> <span class="pl-s"> B;2.2</span> <span class="pl-s"> """</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">expected</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-kos">(</span><span class="pl-smi">string</span> <span class="pl-s1">Key</span><span class="pl-kos">,</span> <span class="pl-smi">double</span> <span class="pl-s1">Value</span><span class="pl-kos">)</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-kos">(</span><span class="pl-s">"A"</span><span class="pl-kos">,</span> <span class="pl-c1">1.1</span><span class="pl-kos">)</span><span class="pl-kos">,</span> <span class="pl-kos">(</span><span class="pl-s">"B"</span><span class="pl-kos">,</span> <span class="pl-c1">2.2</span><span class="pl-kos">)</span><span class="pl-kos">,</span> <span class="pl-kos">}</span><span class="pl-kos">;</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromText</span><span class="pl-kos">(</span><span class="pl-s1">text</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">actual</span> <span class="pl-c1">=</span> <span class="pl-s1">Enumerate</span><span class="pl-kos">(</span><span class="pl-s1">reader</span><span class="pl-kos">,</span> row <span class="pl-c1">=&gt;</span> <span class="pl-kos">(</span><span class="pl-s1">row</span><span class="pl-kos">[</span><span class="pl-s">"Key"</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-en">ToString</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">,</span> <span class="pl-s1">row</span><span class="pl-kos">[</span><span class="pl-s">"Value"</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-smi">Parse</span><span class="pl-c1">&lt;</span><span class="pl-smi">double</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">)</span> <span class="pl-kos">.</span><span class="pl-en">ToArray</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">CollectionAssert</span><span class="pl-kos">.</span><span class="pl-en">AreEqual</span><span class="pl-kos">(</span><span class="pl-s1">expected</span><span class="pl-kos">,</span> <span class="pl-s1">actual</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-smi">IEnumerable</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-en">Enumerate</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-smi">SepReader</span> <span class="pl-s1">reader</span><span class="pl-kos">,</span> <span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-smi">RowFunc</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-s1"><span class="pl-k">select</span></span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">foreach</span> <span class="pl-kos">(</span><span class="pl-k">var</span> <span class="pl-s1">row</span> <span class="pl-k">in</span> <span class="pl-s1">reader</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">yield</span> <span class="pl-k">return</span> <span class="pl-s1"><span class="pl-k">select</span></span><span class="pl-kos">(</span><span class="pl-s1">row</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span></pre></div> <p dir="auto">In fact, Sep provides such a convenience extension method. And, discounting the <code>Enumerate</code> method, this does have less boilerplate, but not really more effective lines of code. The issue here is that this tends to favor factoring code in a way that can become very inefficient quickly. Consider if one wanted to only enumerate rows matching a predicate on <code>Key</code> which meant only 1% of rows were to be enumerated e.g.:</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="var text = &quot;&quot;&quot; Key;Value A;1.1 B;2.2 &quot;&quot;&quot;; var expected = new (string Key, double Value)[] { (&quot;B&quot;, 2.2), }; using var reader = Sep.Reader().FromText(text); var actual = reader.Enumerate( row =&gt; (row[&quot;Key&quot;].ToString(), row[&quot;Value&quot;].Parse&lt;double&gt;())) .Where(kv =&gt; kv.Item1.StartsWith('B')) .ToArray(); CollectionAssert.AreEqual(expected, actual);"><pre><span class="pl-k">var</span> <span class="pl-s1">text</span> <span class="pl-c1">=</span> <span class="pl-s">"""</span> <span class="pl-s"> Key;Value</span> <span class="pl-s"> A;1.1</span> <span class="pl-s"> B;2.2</span> <span class="pl-s"> """</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">expected</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-kos">(</span><span class="pl-smi">string</span> <span class="pl-s1">Key</span><span class="pl-kos">,</span> <span class="pl-smi">double</span> <span class="pl-s1">Value</span><span class="pl-kos">)</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-kos">(</span><span class="pl-s">"B"</span><span class="pl-kos">,</span> <span class="pl-c1">2.2</span><span class="pl-kos">)</span><span class="pl-kos">,</span> <span class="pl-kos">}</span><span class="pl-kos">;</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromText</span><span class="pl-kos">(</span><span class="pl-s1">text</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">actual</span> <span class="pl-c1">=</span> <span class="pl-s1">reader</span><span class="pl-kos">.</span><span class="pl-en">Enumerate</span><span class="pl-kos">(</span> row <span class="pl-c1">=&gt;</span> <span class="pl-kos">(</span><span class="pl-s1">row</span><span class="pl-kos">[</span><span class="pl-s">"Key"</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-en">ToString</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">,</span> <span class="pl-s1">row</span><span class="pl-kos">[</span><span class="pl-s">"Value"</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-smi">Parse</span><span class="pl-c1">&lt;</span><span class="pl-smi">double</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">)</span> <span class="pl-kos">.</span><span class="pl-en">Where</span><span class="pl-kos">(</span>kv <span class="pl-c1">=&gt;</span> <span class="pl-s1">kv</span><span class="pl-kos">.</span><span class="pl-s1">Item1</span><span class="pl-kos">.</span><span class="pl-en">StartsWith</span><span class="pl-kos">(</span><span class="pl-s">'B'</span><span class="pl-kos">)</span><span class="pl-kos">)</span> <span class="pl-kos">.</span><span class="pl-en">ToArray</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">CollectionAssert</span><span class="pl-kos">.</span><span class="pl-en">AreEqual</span><span class="pl-kos">(</span><span class="pl-s1">expected</span><span class="pl-kos">,</span> <span class="pl-s1">actual</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <p dir="auto">This means you are still parsing the double (which is magnitudes slower than getting just the key) for all rows. Imagine if this was an array of floating points or similar. Not only would you then be parsing a lot of values you would also be allocated 99x arrays that aren't used after filtering with <code>Where</code>.</p> <p dir="auto">Instead, you should focus on how to express the enumeration in a way that is both efficient and easy to read. For example, the above could be rewritten as:</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="var text = &quot;&quot;&quot; Key;Value A;1.1 B;2.2 &quot;&quot;&quot;; var expected = new (string Key, double Value)[] { (&quot;B&quot;, 2.2), }; using var reader = Sep.Reader().FromText(text); var actual = Enumerate(reader).ToArray(); CollectionAssert.AreEqual(expected, actual); static IEnumerable&lt;(string Key, double Value)&gt; Enumerate(SepReader reader) { foreach (var row in reader) { var keyCol = row[&quot;Key&quot;]; if (keyCol.Span.StartsWith(&quot;B&quot;)) { yield return (keyCol.ToString(), row[&quot;Value&quot;].Parse&lt;double&gt;()); } } }"><pre><span class="pl-k">var</span> <span class="pl-s1">text</span> <span class="pl-c1">=</span> <span class="pl-s">"""</span> <span class="pl-s"> Key;Value</span> <span class="pl-s"> A;1.1</span> <span class="pl-s"> B;2.2</span> <span class="pl-s"> """</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">expected</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-kos">(</span><span class="pl-smi">string</span> <span class="pl-s1">Key</span><span class="pl-kos">,</span> <span class="pl-smi">double</span> <span class="pl-s1">Value</span><span class="pl-kos">)</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-kos">(</span><span class="pl-s">"B"</span><span class="pl-kos">,</span> <span class="pl-c1">2.2</span><span class="pl-kos">)</span><span class="pl-kos">,</span> <span class="pl-kos">}</span><span class="pl-kos">;</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromText</span><span class="pl-kos">(</span><span class="pl-s1">text</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">actual</span> <span class="pl-c1">=</span> <span class="pl-s1">Enumerate</span><span class="pl-kos">(</span><span class="pl-s1">reader</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">ToArray</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">CollectionAssert</span><span class="pl-kos">.</span><span class="pl-en">AreEqual</span><span class="pl-kos">(</span><span class="pl-s1">expected</span><span class="pl-kos">,</span> <span class="pl-s1">actual</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-smi">IEnumerable</span><span class="pl-c1">&lt;</span><span class="pl-kos">(</span><span class="pl-smi">string</span> <span class="pl-s1">Key</span><span class="pl-kos">,</span> <span class="pl-smi">double</span> <span class="pl-s1">Value</span><span class="pl-kos">)</span><span class="pl-c1">&gt;</span> <span class="pl-en">Enumerate</span><span class="pl-kos">(</span><span class="pl-smi">SepReader</span> <span class="pl-s1">reader</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">foreach</span> <span class="pl-kos">(</span><span class="pl-k">var</span> <span class="pl-s1">row</span> <span class="pl-k">in</span> <span class="pl-s1">reader</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">var</span> <span class="pl-s1">keyCol</span> <span class="pl-c1">=</span> <span class="pl-s1">row</span><span class="pl-kos">[</span><span class="pl-s">"Key"</span><span class="pl-kos">]</span><span class="pl-kos">;</span> <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">keyCol</span><span class="pl-kos">.</span><span class="pl-s1">Span</span><span class="pl-kos">.</span><span class="pl-en">StartsWith</span><span class="pl-kos">(</span><span class="pl-s">"B"</span><span class="pl-kos">)</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">yield</span> <span class="pl-k">return</span> <span class="pl-kos">(</span><span class="pl-s1">keyCol</span><span class="pl-kos">.</span><span class="pl-en">ToString</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">,</span> <span class="pl-s1">row</span><span class="pl-kos">[</span><span class="pl-s">"Value"</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-smi">Parse</span><span class="pl-c1">&lt;</span><span class="pl-smi">double</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span></pre></div> <p dir="auto">To accomodate this Sep provides an overload for <code>Enumerate</code> that is similar to:</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="static IEnumerable&lt;T&gt; Enumerate&lt;T&gt;(this SepReader reader, SepReader.RowTryFunc&lt;T&gt; trySelect) { foreach (var row in reader) { if (trySelect(row, out var value)) { yield return value; } } }"><pre><span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-smi">IEnumerable</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-en">Enumerate</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-smi">SepReader</span> <span class="pl-s1">reader</span><span class="pl-kos">,</span> <span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-smi">RowTryFunc</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-s1">trySelect</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">foreach</span> <span class="pl-kos">(</span><span class="pl-k">var</span> <span class="pl-s1">row</span> <span class="pl-k">in</span> <span class="pl-s1">reader</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">trySelect</span><span class="pl-kos">(</span><span class="pl-s1">row</span><span class="pl-kos">,</span> <span class="pl-k">out</span> <span class="pl-k">var</span> <span class="pl-s1">value</span><span class="pl-kos">)</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">yield</span> <span class="pl-k">return</span> <span class="pl-s1">value</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span></pre></div> <p dir="auto">With this the above custom <code>Enumerate</code> can be replaced with:</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="var text = &quot;&quot;&quot; Key;Value A;1.1 B;2.2 &quot;&quot;&quot;; var expected = new (string Key, double Value)[] { (&quot;B&quot;, 2.2), }; using var reader = Sep.Reader().FromText(text); var actual = reader.Enumerate((SepReader.Row row, out (string Key, double Value) kv) =&gt; { var keyCol = row[&quot;Key&quot;]; if (keyCol.Span.StartsWith(&quot;B&quot;)) { kv = (keyCol.ToString(), row[&quot;Value&quot;].Parse&lt;double&gt;()); return true; } kv = default; return false; }).ToArray(); CollectionAssert.AreEqual(expected, actual);"><pre><span class="pl-k">var</span> <span class="pl-s1">text</span> <span class="pl-c1">=</span> <span class="pl-s">"""</span> <span class="pl-s"> Key;Value</span> <span class="pl-s"> A;1.1</span> <span class="pl-s"> B;2.2</span> <span class="pl-s"> """</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">expected</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-kos">(</span><span class="pl-smi">string</span> <span class="pl-s1">Key</span><span class="pl-kos">,</span> <span class="pl-smi">double</span> <span class="pl-s1">Value</span><span class="pl-kos">)</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-kos">(</span><span class="pl-s">"B"</span><span class="pl-kos">,</span> <span class="pl-c1">2.2</span><span class="pl-kos">)</span><span class="pl-kos">,</span> <span class="pl-kos">}</span><span class="pl-kos">;</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromText</span><span class="pl-kos">(</span><span class="pl-s1">text</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">actual</span> <span class="pl-c1">=</span> <span class="pl-s1">reader</span><span class="pl-kos">.</span><span class="pl-en">Enumerate</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Row</span> <span class="pl-s1">row</span><span class="pl-kos">,</span> <span class="pl-k">out</span> <span class="pl-kos">(</span><span class="pl-smi">string</span> <span class="pl-s1">Key</span><span class="pl-kos">,</span> <span class="pl-smi">double</span> <span class="pl-s1">Value</span><span class="pl-kos">)</span> <span class="pl-s1">kv</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-kos">{</span> <span class="pl-k">var</span> <span class="pl-s1">keyCol</span> <span class="pl-c1">=</span> <span class="pl-s1">row</span><span class="pl-kos">[</span><span class="pl-s">"Key"</span><span class="pl-kos">]</span><span class="pl-kos">;</span> <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">keyCol</span><span class="pl-kos">.</span><span class="pl-s1">Span</span><span class="pl-kos">.</span><span class="pl-en">StartsWith</span><span class="pl-kos">(</span><span class="pl-s">"B"</span><span class="pl-kos">)</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-s1">kv</span> <span class="pl-c1">=</span> <span class="pl-kos">(</span><span class="pl-s1">keyCol</span><span class="pl-kos">.</span><span class="pl-en">ToString</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">,</span> <span class="pl-s1">row</span><span class="pl-kos">[</span><span class="pl-s">"Value"</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-smi">Parse</span><span class="pl-c1">&lt;</span><span class="pl-smi">double</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">return</span> <span class="pl-c1">true</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-s1">kv</span> <span class="pl-c1">=</span> <span class="pl-k">default</span><span class="pl-kos">;</span> <span class="pl-k">return</span> <span class="pl-c1">false</span><span class="pl-kos">;</span> <span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">ToArray</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">CollectionAssert</span><span class="pl-kos">.</span><span class="pl-en">AreEqual</span><span class="pl-kos">(</span><span class="pl-s1">expected</span><span class="pl-kos">,</span> <span class="pl-s1">actual</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <p dir="auto">Note how this is pretty much the same length as the previous custom <code>Enumerate</code>. Also worse due to how C# requires specifying types for <code>out</code> parameters which then requires all parameter types for the lambda to be specified. Hence, in this case the custom <code>Enumerate</code> does not take significantly longer to write and is a lot more efficient than using LINQ <code>.Where</code> (also avoids allocating a string for key for each row) and is easier to debug and perhaps even read. All examples above can be seen in <a href="/nietras/Sep/blob/main/src/Sep.XyzTest/ReadMeTest.cs">ReadMeTest.cs</a>.</p> <p dir="auto">There is a strong case for having an enumerate API though and that is for parallelized enumeration, which will be discussed next.</p> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">ParallelEnumerate and Enumerate</h4><a id="user-content-parallelenumerate-and-enumerate" class="anchor" aria-label="Permalink: ParallelEnumerate and Enumerate" href="#parallelenumerate-and-enumerate"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">As discussed in the previous section Sep provides <code>Enumerate</code> convenience extension methods, that should be used carefully. Alongside these there are <code>ParallelEnumerate</code> extension methods that provide very efficient multi-threaded enumeration. See <a href="#comparison-benchmarks">benchmarks</a> for numbers and <a href="#public-api-reference">Public API Reference</a>.</p> <p dir="auto"><code>ParallelEnumerate</code> is build on top of LINQ <code>AsParallel().AsOrdered()</code> and will return exactly the same as <code>Enumerate</code> but with enumeration parallelized. This will use more memory during execution and as many threads as possible via the .NET thread pool. When using <code>ParallelEnumerate</code> one should, therefore (as always), be certain the provided delegate does not refer to or change any mutable state.</p> <p dir="auto"><code>ParallelEnumerate</code> comes with a lot of overhead compared to single-threaded <code>foreach</code> or <code>Enumerate</code> and should be used carefully based on measuring any potential benefit. Sep goes a long way to make this very efficient by using pooled arrays and parsing multiple rows in batches, but if the source only has a few rows then any benefit is unlikely.</p> <p dir="auto">Due to <code>ParallelEnumerate</code> being based on batches of rows it is also important not to "abuse" it in-place of LINQ <code>AsParallel</code>. The idea is to use it for <em>parsing</em> rows, not for doing expensive per row operations like loading an image or similar. In that case, you are better off using <code>AsParallel()</code> after <code>ParallelEnumerate</code> or <code>Enumerate</code> similarly to:</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="using var reader = Sep.Reader().FromFile(&quot;very-long.csv&quot;); var results = reader.ParallelEnumerate(ParseRow) .AsParallel().AsOrdered() .Select(LoadData) // Expensive load .ToList();"><pre><span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromFile</span><span class="pl-kos">(</span><span class="pl-s">"very-long.csv"</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">results</span> <span class="pl-c1">=</span> <span class="pl-s1">reader</span><span class="pl-kos">.</span><span class="pl-en">ParallelEnumerate</span><span class="pl-kos">(</span><span class="pl-s1">ParseRow</span><span class="pl-kos">)</span> <span class="pl-kos">.</span><span class="pl-en">AsParallel</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">AsOrdered</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">.</span><span class="pl-en">Select</span><span class="pl-kos">(</span><span class="pl-s1">LoadData</span><span class="pl-kos">)</span> <span class="pl-c">// Expensive load</span> <span class="pl-kos">.</span><span class="pl-en">ToList</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <p dir="auto">As a rule of thumb if the time per row exceeds 1 millisecond consider moving the expensive work to after <code>ParallelEnumerate</code>/<code>Enumerate</code>,</p> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">SepWriter API</h3><a id="user-content-sepwriter-api" class="anchor" aria-label="Permalink: SepWriter API" href="#sepwriter-api"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto"><code>SepWriter</code> API has the following structure (in pseudo-C# code):</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="using var writer = Sep.Writer(o =&gt; o).ToFile/ToText/To...; foreach (var data in EnumerateData()) { using var row = writer.NewRow(); var _ = row[colName/colNames].Set/Format&lt;T&gt;...; var _ = row[colIndex/colIndices].Set/Format&lt;T&gt;...; }"><pre><span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">writer</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Writer</span><span class="pl-kos">(</span>o <span class="pl-c1">=&gt;</span> <span class="pl-s1">o</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-s1">ToFile</span><span class="pl-c1">/</span><span class="pl-s1">ToText</span><span class="pl-c1">/</span><span class="pl-s1">To</span>..<span class="pl-kos">.</span><span class="pl-kos">;</span> <span class="pl-k">foreach</span> <span class="pl-kos">(</span><span class="pl-k">var</span> <span class="pl-s1">data</span> <span class="pl-k">in</span> <span class="pl-s1">EnumerateData</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">row</span> <span class="pl-c1">=</span> <span class="pl-s1">writer</span><span class="pl-kos">.</span><span class="pl-en">NewRow</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">_</span> <span class="pl-c1">=</span> <span class="pl-s1">row</span><span class="pl-kos">[</span><span class="pl-s1">colName</span><span class="pl-c1">/</span><span class="pl-s1">colNames</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-s1">Set</span><span class="pl-c1">/</span><span class="pl-smi">Format</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span>..<span class="pl-kos">.</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">_</span> <span class="pl-c1">=</span> <span class="pl-s1">row</span><span class="pl-kos">[</span><span class="pl-s1">colIndex</span><span class="pl-c1">/</span><span class="pl-s1">colIndices</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-s1">Set</span><span class="pl-c1">/</span><span class="pl-smi">Format</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span>..<span class="pl-kos">.</span><span class="pl-kos">;</span> <span class="pl-kos">}</span></pre></div> <p dir="auto">That is, to use <code>SepWriter</code> follow the points below:</p> <ol dir="auto"> <li>Optionally define <code>Sep</code> or use default automatically inferred separator.</li> <li>Specify writer with optional configuration of <code>SepWriterOptions</code>. For all options see <a href="#sepwriteroptions">SepWriterOptions</a>.</li> <li>Specify destination e.g. file, text (<code>string</code> via <code>StringWriter</code>), <code>TextWriter</code>, etc. via <code>To</code> extension methods.</li> <li>MISSING: <code>SepWriter</code> currently does not allow you to define the header up front. Instead, header is defined by the order in which column names are accessed/created when defining the row.</li> <li>Define new rows with <code>NewRow</code>. ⚠ Be sure to dispose any new rows before starting the next! For convenience Sep provides an overload for <code>NewRow</code> that takes a <code>SepReader.Row</code> and copies the columns from that row to the new row: <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="using var reader = Sep.Reader().FromText(text); using var writer = reader.Spec.Writer().ToText(); foreach (var readRow in reader) { using var writeRow = writer.NewRow(readRow); }"><pre><span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromText</span><span class="pl-kos">(</span><span class="pl-s1">text</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">writer</span> <span class="pl-c1">=</span> <span class="pl-s1">reader</span><span class="pl-kos">.</span><span class="pl-s1">Spec</span><span class="pl-kos">.</span><span class="pl-en">Writer</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">ToText</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">foreach</span> <span class="pl-kos">(</span><span class="pl-k">var</span> <span class="pl-s1">readRow</span> <span class="pl-k">in</span> <span class="pl-s1">reader</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">writeRow</span> <span class="pl-c1">=</span> <span class="pl-s1">writer</span><span class="pl-kos">.</span><span class="pl-en">NewRow</span><span class="pl-kos">(</span><span class="pl-s1">readRow</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-kos">}</span></pre></div> </li> <li>Create a column by selecting by name or index. Or multiple columns via indices and names. <code>Sep</code> internally handles pooled allocation and reuse of arrays for multiple columns.</li> <li>Use <code>Set</code> to set the column value either as a <code>ReadOnlySpan&lt;char&gt;</code>, <code>string</code> or via an interpolated string. Or use <code>Format&lt;T&gt;</code> where <code>T : IFormattable</code> to format <code>T</code> to the column value.</li> <li>Row is written when <code>Dispose</code> is called on the row. <blockquote> <p dir="auto">Note this is to allow a row to be defined flexibly with both column removal, moves and renames in the future. This is not yet supported.</p> </blockquote> </li> </ol> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">SepWriterOptions</h4><a id="user-content-sepwriteroptions" class="anchor" aria-label="Permalink: SepWriterOptions" href="#sepwriteroptions"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">The following options are available:</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="/// &lt;summary&gt; /// Specifies the separator used. /// &lt;/summary&gt; public Sep Sep { get; init; } /// &lt;summary&gt; /// Specifies the culture used for parsing. /// May be `null` for default culture. /// &lt;/summary&gt; public CultureInfo? CultureInfo { get; init; } /// &lt;summary&gt; /// Specifies whether to write a header row /// before data rows. Requires all columns /// to have a name. Otherwise, columns can be /// added by indexing alone. /// &lt;/summary&gt; public bool WriteHeader { get; init; } = true; /// &lt;summary&gt; /// Disables checking if column count is the /// same for all rows. /// &lt;/summary&gt; /// &lt;remarks&gt; /// When true, the &lt;see cref=&quot;ColNotSetOption&quot;/&gt; /// will define how columns that are not set /// are handled. For example, whether to skip /// or write an empty column if a column has /// not been set for a given row. /// &lt;para&gt; /// If any columns are skipped, then columns of /// a row may, therefore, be out of sync with /// column names if &lt;see cref=&quot;WriteHeader&quot;/&gt; /// is true. /// &lt;/para&gt; /// As such, any number of columns can be /// written as long as done sequentially. /// &lt;/remarks&gt; public bool DisableColCountCheck { get; init; } = false; /// &lt;summary&gt; /// Specifies how to handle columns that are /// not set. /// &lt;/summary&gt; public SepColNotSetOption ColNotSetOption { get; init; } = SepColNotSetOption.Throw; /// &lt;summary&gt; /// Specifies whether to escape column names /// and values when writing. /// &lt;/summary&gt; /// &lt;remarks&gt; /// When true, if a column contains a separator /// (e.g. `;`), carriage return (`\r`), line /// feed (`\n` or quote (`&quot;`) then the column /// is prefixed and suffixed with quotes `&quot;` /// and any quote in the column is escaped by /// adding an extra quote so it becomes `&quot;&quot;`. /// Note that escape applies to column names /// too, but only the written name. /// &lt;/remarks&gt; public bool Escape { get; init; } = false; /// &lt;summary&gt; /// Forwarded to &lt;see /// cref=&quot;System.Threading.Tasks.ValueTask.ConfigureAwait(bool)&quot;/&gt; or /// similar when async methods are called. /// &lt;/summary&gt; public bool AsyncContinueOnCapturedContext { get; init; } = false;"><pre><span class="pl-c">/// &lt;summary&gt;</span> <span class="pl-c">/// Specifies the separator used.</span> <span class="pl-c">/// &lt;/summary&gt;</span> <span class="pl-k">public</span> <span class="pl-smi">Sep</span> <span class="pl-s1">Sep</span><span class="pl-kos"></span> <span class="pl-kos">{</span> <span class="pl-s1">get</span><span class="pl-kos">;</span> <span class="pl-s1">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-c">/// &lt;summary&gt;</span> <span class="pl-c">/// Specifies the culture used for parsing. </span> <span class="pl-c">/// May be `null` for default culture.</span> <span class="pl-c">/// &lt;/summary&gt;</span> <span class="pl-k">public</span> <span class="pl-smi">CultureInfo</span><span class="pl-c1">?</span> <span class="pl-s1">CultureInfo</span><span class="pl-kos"></span> <span class="pl-kos">{</span> <span class="pl-s1">get</span><span class="pl-kos">;</span> <span class="pl-s1">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-c">/// &lt;summary&gt;</span> <span class="pl-c">/// Specifies whether to write a header row </span> <span class="pl-c">/// before data rows. Requires all columns </span> <span class="pl-c">/// to have a name. Otherwise, columns can be</span> <span class="pl-c">/// added by indexing alone.</span> <span class="pl-c">/// &lt;/summary&gt;</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">WriteHeader</span><span class="pl-kos"></span> <span class="pl-kos">{</span> <span class="pl-s1">get</span><span class="pl-kos">;</span> <span class="pl-s1">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span><span class="pl-s1"></span> <span class="pl-c1">=</span> <span class="pl-c1">true</span><span class="pl-kos">;</span> <span class="pl-c">/// &lt;summary&gt;</span> <span class="pl-c">/// Disables checking if column count is the </span> <span class="pl-c">/// same for all rows.</span> <span class="pl-c">/// &lt;/summary&gt;</span> <span class="pl-c">/// &lt;remarks&gt;</span> <span class="pl-c">/// When true, the &lt;see cref="ColNotSetOption"/&gt;</span> <span class="pl-c">/// will define how columns that are not set</span> <span class="pl-c">/// are handled. For example, whether to skip</span> <span class="pl-c">/// or write an empty column if a column has</span> <span class="pl-c">/// not been set for a given row.</span> <span class="pl-c">/// &lt;para&gt;</span> <span class="pl-c">/// If any columns are skipped, then columns of</span> <span class="pl-c">/// a row may, therefore, be out of sync with</span> <span class="pl-c">/// column names if &lt;see cref="WriteHeader"/&gt;</span> <span class="pl-c">/// is true.</span> <span class="pl-c">/// &lt;/para&gt;</span> <span class="pl-c">/// As such, any number of columns can be</span> <span class="pl-c">/// written as long as done sequentially.</span> <span class="pl-c">/// &lt;/remarks&gt;</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">DisableColCountCheck</span><span class="pl-kos"></span> <span class="pl-kos">{</span> <span class="pl-s1">get</span><span class="pl-kos">;</span> <span class="pl-s1">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span><span class="pl-s1"></span> <span class="pl-c1">=</span> <span class="pl-c1">false</span><span class="pl-kos">;</span> <span class="pl-c">/// &lt;summary&gt;</span> <span class="pl-c">/// Specifies how to handle columns that are </span> <span class="pl-c">/// not set.</span> <span class="pl-c">/// &lt;/summary&gt;</span> <span class="pl-k">public</span> <span class="pl-smi">SepColNotSetOption</span> <span class="pl-s1">ColNotSetOption</span><span class="pl-kos"></span> <span class="pl-kos">{</span> <span class="pl-s1">get</span><span class="pl-kos">;</span> <span class="pl-s1">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span><span class="pl-s1"></span> <span class="pl-c1">=</span> <span class="pl-s1">SepColNotSetOption</span><span class="pl-kos">.</span><span class="pl-s1">Throw</span><span class="pl-kos">;</span> <span class="pl-c">/// &lt;summary&gt;</span> <span class="pl-c">/// Specifies whether to escape column names </span> <span class="pl-c">/// and values when writing.</span> <span class="pl-c">/// &lt;/summary&gt;</span> <span class="pl-c">/// &lt;remarks&gt;</span> <span class="pl-c">/// When true, if a column contains a separator </span> <span class="pl-c">/// (e.g. `;`), carriage return (`\r`), line </span> <span class="pl-c">/// feed (`\n` or quote (`"`) then the column </span> <span class="pl-c">/// is prefixed and suffixed with quotes `"` </span> <span class="pl-c">/// and any quote in the column is escaped by</span> <span class="pl-c">/// adding an extra quote so it becomes `""`.</span> <span class="pl-c">/// Note that escape applies to column names </span> <span class="pl-c">/// too, but only the written name.</span> <span class="pl-c">/// &lt;/remarks&gt;</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">Escape</span><span class="pl-kos"></span> <span class="pl-kos">{</span> <span class="pl-s1">get</span><span class="pl-kos">;</span> <span class="pl-s1">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span><span class="pl-s1"></span> <span class="pl-c1">=</span> <span class="pl-c1">false</span><span class="pl-kos">;</span> <span class="pl-c">/// &lt;summary&gt;</span> <span class="pl-c">/// Forwarded to &lt;see</span> <span class="pl-c">/// cref="System.Threading.Tasks.ValueTask.ConfigureAwait(bool)"/&gt; or</span> <span class="pl-c">/// similar when async methods are called.</span> <span class="pl-c">/// &lt;/summary&gt;</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">AsyncContinueOnCapturedContext</span><span class="pl-kos"></span> <span class="pl-kos">{</span> <span class="pl-s1">get</span><span class="pl-kos">;</span> <span class="pl-s1">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span><span class="pl-s1"></span> <span class="pl-c1">=</span> <span class="pl-c1">false</span><span class="pl-kos">;</span></pre></div> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Escaping</h4><a id="user-content-escaping" class="anchor" aria-label="Permalink: Escaping" href="#escaping"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Escaping is not enabled by default in Sep, but when it is it gives the same results as other popular CSV librares as shown below. Although, CsvHelper appears to be escaping spaces as well, which is not necessary.</p> <markdown-accessiblity-table><table> <thead> <tr> <th>Input</th> <th>CsvHelper</th> <th>Sylvan</th> <th>Sep¹</th> </tr> </thead> <tbody> <tr> <td>``</td> <td></td> <td></td> <td></td> </tr> <tr> <td><code>·</code></td> <td><code>"·"</code></td> <td><code>·</code></td> <td><code>·</code></td> </tr> <tr> <td><code>a</code></td> <td><code>a</code></td> <td><code>a</code></td> <td><code>a</code></td> </tr> <tr> <td><code>;</code></td> <td><code>";"</code></td> <td><code>";"</code></td> <td><code>";"</code></td> </tr> <tr> <td><code>,</code></td> <td><code>,</code></td> <td><code>,</code></td> <td><code>,</code></td> </tr> <tr> <td><code>"</code></td> <td><code>""""</code></td> <td><code>""""</code></td> <td><code>""""</code></td> </tr> <tr> <td><code>\r</code></td> <td><code>"\r"</code></td> <td><code>"\r"</code></td> <td><code>"\r"</code></td> </tr> <tr> <td><code>\n</code></td> <td><code>"\n"</code></td> <td><code>"\n"</code></td> <td><code>"\n"</code></td> </tr> <tr> <td><code>a"aa"aaa</code></td> <td><code>"a""aa""aaa"</code></td> <td><code>"a""aa""aaa"</code></td> <td><code>"a""aa""aaa"</code></td> </tr> <tr> <td><code>a;aa;aaa</code></td> <td><code>"a;aa;aaa"</code></td> <td><code>"a;aa;aaa"</code></td> <td><code>"a;aa;aaa"</code></td> </tr> </tbody> </table></markdown-accessiblity-table> <p dir="auto">Separator/delimiter is set to semi-colon <code>;</code> (default for Sep)</p> <p dir="auto"><code>·</code> (middle dot) is whitespace to make this visible</p> <p dir="auto"><code>\r</code>, <code>\n</code> are carriage return and line feed special characters to make these visible</p> <p dir="auto">¹ Sep with <code>Escape = true</code> in <code>SepWriterOptions</code></p> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Async Support</h2><a id="user-content-async-support" class="anchor" aria-label="Permalink: Async Support" href="#async-support"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Sep supports efficient <code>ValueTask</code> based asynchronous reading and writing.</p> <p dir="auto">However, given both <code>SepReader.Row</code> and <code>SepWriter.Row</code> are <code>ref struct</code>s, as they point to internal state and should only be used one at a time, <code>async/await</code> usage is only supported on C# 13.0+ as this has support for <strong>"ref and unsafe in iterators and async methods"</strong> as covered in <a href="https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-13" rel="nofollow">What's new in C# 13</a>. Please consult details in that for limitations and constraints due to this.</p> <p dir="auto">Similarly, <code>SepReader</code> only implements <code>IAsyncEnumerable&lt;SepReader.Row&gt;</code> (and <code>IEnumerable&lt;SepReader.Row&gt;</code>) for .NET 9.0+/C# 13.0+ since then the interfaces have been annotated with <code>allows ref struct</code> for <code>T</code>.</p> <p dir="auto">Async support is provided on the existing <code>SepReader</code> and <code>SepWriter</code> types similar to how <code>TextReader</code> and <code>TextWriter</code> support both sync and async usage. This means you as a developer are responsible for calling async methods and using <code>await</code> when necessary. See below for a simple example and consult tests on GitHub for more examples.</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="var text = &quot;&quot;&quot; A;B;C;D;E;F Sep;🚀;1;1.2;0.1;0.5 CSV;✅;2;2.2;0.2;1.5 &quot;&quot;&quot;; // Empty line at end is for line ending using var reader = await Sep.Reader().FromTextAsync(text); await using var writer = reader.Spec.Writer().ToText(); await foreach (var readRow in reader) { await using var writeRow = writer.NewRow(readRow); } Assert.AreEqual(text, writer.ToString());"><pre><span class="pl-k">var</span> <span class="pl-s1">text</span> <span class="pl-c1">=</span> <span class="pl-s">"""</span> <span class="pl-s"> A;B;C;D;E;F</span> <span class="pl-s"> Sep;🚀;1;1.2;0.1;0.5</span> <span class="pl-s"> CSV;✅;2;2.2;0.2;1.5</span> <span class="pl-s"> </span> <span class="pl-s"> """</span><span class="pl-kos">;</span> <span class="pl-c">// Empty line at end is for line ending</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-k">await</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromTextAsync</span><span class="pl-kos">(</span><span class="pl-s1">text</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">await</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">writer</span> <span class="pl-c1">=</span> <span class="pl-s1">reader</span><span class="pl-kos">.</span><span class="pl-s1">Spec</span><span class="pl-kos">.</span><span class="pl-en">Writer</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">ToText</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">await</span> <span class="pl-k">foreach</span> <span class="pl-kos">(</span><span class="pl-k">var</span> <span class="pl-s1">readRow</span> <span class="pl-k">in</span> <span class="pl-s1">reader</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">await</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">writeRow</span> <span class="pl-c1">=</span> <span class="pl-s1">writer</span><span class="pl-kos">.</span><span class="pl-en">NewRow</span><span class="pl-kos">(</span><span class="pl-s1">readRow</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">AreEqual</span><span class="pl-kos">(</span><span class="pl-s1">text</span><span class="pl-kos">,</span> <span class="pl-s1">writer</span><span class="pl-kos">.</span><span class="pl-en">ToString</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <p dir="auto">Note how for <code>SepReader</code> the <code>FromTextAsync</code> is suffixed with <code>Async</code> to indicate async creation, this is due to the reader having to read the first row of the source at creation to determine both separator and, if file has a header, column names of the header. The <code>From*Async</code> call then has to be <code>await</code>ed. After that rows can be enumerated asynchronously simply by putting <code>await</code> before <code>foreach</code>. If one forgets to do that the rows will be enumerated synchronously.</p> <p dir="auto">For <code>SepWriter</code> the usage is kind of reversed. <code>To*</code> methods have no <code>Async</code> variants, since creation is synchronous. That is, <code>StreamWriter</code> is created by a simple constructor call. Nothing is written until a header or row is defined and <code>Dispose</code>/<code>DisposeAsync</code> is called on the row.</p> <p dir="auto">For reader nothing needs to be asynchronously disposed, so <code>using</code> does not require <code>await</code>. However, for <code>SepWriter</code> dispose may have to write/flush data to underlying <code>TextWriter</code> and hence it should be using <code>DisposeAsync</code>, so you must use <code>await using</code>.</p> <p dir="auto">To support cancellation many methods have overloads that accept a <code>CancellationToken</code> like the <code>From*Async</code> methods for creating a <code>SepReader</code> or for example <code>NewRow</code> for <code>SepWriter</code>. Consult <a href="#public-api-reference">Public API Reference</a> for full set of available methods.</p> <p dir="auto">Additionally, both <a href="#sepreaderoptions">SepReaderOptions</a> and <a href="#sepwriteroptions">SepWriterOptions</a> feature the <code>bool AsyncContinueOnCapturedContext</code> option that is forwarded to internal <code>ConfigureAwait</code> calls, see the <a href="https://devblogs.microsoft.com/dotnet/configureawait-faq/" rel="nofollow">ConfigureAwait FAQ</a> for details on that.</p> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Limitations and Constraints</h2><a id="user-content-limitations-and-constraints" class="anchor" aria-label="Permalink: Limitations and Constraints" href="#limitations-and-constraints"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Sep is designed to be minimal and fast. As such, it has some limitations and constraints:</p> <ul dir="auto"> <li>Comments <code>#</code> are not directly supported. You can skip a row by: <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="foreach (var row in reader) { // Skip row if starts with # if (!row.Span.StartsWith(&quot;#&quot;)) { // ... } }"><pre><span class="pl-k">foreach</span> <span class="pl-kos">(</span><span class="pl-k">var</span> <span class="pl-s1">row</span> <span class="pl-k">in</span> <span class="pl-s1">reader</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-c">// Skip row if starts with #</span> <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-c1">!</span><span class="pl-s1">row</span><span class="pl-kos">.</span><span class="pl-s1">Span</span><span class="pl-kos">.</span><span class="pl-en">StartsWith</span><span class="pl-kos">(</span><span class="pl-s">"#"</span><span class="pl-kos">)</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-c">// ...</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span></pre></div> This does not allow skipping lines before a header row starting with <code>#</code> though. In <a href="#example-catalogue">Example Catalogue</a> a full example is given detailing how to skip lines before header.</li> </ul> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Comparison Benchmarks</h2><a id="user-content-comparison-benchmarks" class="anchor" aria-label="Permalink: Comparison Benchmarks" href="#comparison-benchmarks"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">To investigate the performance of Sep it is compared to:</p> <ul dir="auto"> <li><a href="https://github.com/JoshClose/csvhelper">CsvHelper</a> - <em>the</em> most commonly used CSV library with a staggering <a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/4d546ab7a4973807831c92912f347f7f0e0a56ba413e2581fd4999690e540bf6/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f63737668656c706572"><img src="https://camo.githubusercontent.com/4d546ab7a4973807831c92912f347f7f0e0a56ba413e2581fd4999690e540bf6/68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f64742f63737668656c706572" alt="downloads" data-canonical-src="https://img.shields.io/nuget/dt/csvhelper" style="max-width: 100%;"></a> downloads on NuGet. Fully featured and battle tested.</li> <li><a href="https://github.com/MarkPflug/Sylvan">Sylvan</a> - is well-known and has previously been shown to be <a href="https://www.joelverhagen.com/blog/2020/12/fastest-net-csv-parsers" rel="nofollow">the fastest CSV libraries for parsing</a> (Sep changes that 😉).</li> <li><code>ReadLine</code>/<code>WriteLine</code> - basic naive implementations that read line by line and split on separator. While writing columns, separators and line endings directly. Does not handle quotes or similar correctly.</li> </ul> <p dir="auto">All benchmarks are run from/to memory either with:</p> <ul dir="auto"> <li><code>StringReader</code> or <code>StreamReader + MemoryStream</code></li> <li><code>StringWriter</code> or <code>StreamWriter + MemoryStream</code></li> </ul> <p dir="auto">This to avoid confounding factors from reading from or writing to disk.</p> <p dir="auto">When using <code>StringReader</code>/<code>StringWriter</code> each <code>char</code> counts as 2 bytes, when measuring throughput e.g. <code>MB/s</code>. When using <code>StreamReader</code>/<code>StreamWriter</code> content is UTF-8 encoded and each <code>char</code> typically counts as 1 byte, as content usually limited to 1 byte per char in UTF-8. Note that in .NET for <code>TextReader</code> and <code>TextWriter</code> data is converted to/from <code>char</code>, but for reading such conversion can often be just as fast as <code>Memmove</code>.</p> <p dir="auto">By default only <code>StringReader</code>/<code>StringWriter</code> results are shown, if a result is based on <code>StreamReader</code>/<code>StreamWriter</code> it will be called out. Usually, results for <code>StreamReader</code>/<code>StreamWriter</code> are in line with <code>StringReader</code>/<code>StringWriter</code> but with half the throughput due to 1 byte vs 2 bytes. For brevity they are not shown here.</p> <p dir="auto">For all benchmark results, Sep has been defined as the <code>Baseline</code> in <a href="https://benchmarkdotnet.org/" rel="nofollow">BenchmarkDotNet</a>. This means <code>Ratio</code> will be 1.00 for Sep. For the others <code>Ratio</code> will then show how many <em>times</em> faster Sep is than that. Or how many <em>times</em> more bytes are allocated in <code>Alloc Ratio</code>.</p> <blockquote> <p dir="auto">Disclaimer: Any comparison made is based on a number of preconditions and assumptions. Sep is a new library written from the ground up to use the latest and greatest features in .NET. CsvHelper has a long history and has to take into account backwards compatibility and still supporting older runtimes, so may not be able to easily utilize more recent features. Same goes for Sylvan. Additionally, Sep has a different feature set compared to the two. Performance is a feature, but not the only feature. Keep that in mind when evaluating results.</p> </blockquote> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Runtime and Platforms</h3><a id="user-content-runtime-and-platforms" class="anchor" aria-label="Permalink: Runtime and Platforms" href="#runtime-and-platforms"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">The following runtime is used for benchmarking:</p> <ul dir="auto"> <li><code>NET 9.0.X</code></li> </ul> <p dir="auto">NOTE: <a href="https://maoni0.medium.com/dynamically-adapting-to-application-sizes-2d72fcb6f1ea" rel="nofollow">Garbage Collection DATAS</a> mode is disabled since this severely impacts (e.g. <a href="https://github.com/dotnet/runtime/issues/109047" data-hovercard-type="issue" data-hovercard-url="/dotnet/runtime/issues/109047/hovercard">1.7x slower</a>) performance for some benchmarks due to the bursty accumulated allocations. That is, <code>GarbageCollectionAdaptationMode</code> is set to <code>0</code>.</p> <p dir="auto">The following platforms are used for benchmarking:</p> <ul dir="auto"> <li><code>AMD EPYC 7763</code> (Virtual) X64 Platform Information <div class="highlight highlight-source-ini notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="OS=Ubuntu 22.04.5 LTS (Jammy Jellyfish) AMD EPYC 7763, 1 CPU, 4 logical and 2 physical cores"><pre><span class="pl-k">OS</span>=Ubuntu 22.04.5 LTS (Jammy Jellyfish) AMD EPYC 7763, 1 CPU, 4 logical and 2 physical cores</pre></div> </li> <li><code>AMD Ryzen 7 PRO 7840U</code> (Laptop on battery) X64 Platform Information <div class="highlight highlight-source-ini notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="OS=Windows 11 (10.0.22631.4460/23H2/2023Update/SunValley3) AMD Ryzen 7 PRO 7840U w/ Radeon 780M Graphics, 1 CPU, 16 logical and 8 physical cores"><pre><span class="pl-k">OS</span>=Windows 11 (10.0.22631.4460/23H2/2023Update/SunValley3) AMD Ryzen 7 PRO 7840U w/ Radeon 780M Graphics, 1 CPU, 16 logical and 8 physical cores</pre></div> </li> <li><code>AMD 5950X</code> (Desktop) X64 Platform Information <div class="highlight highlight-source-ini notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="OS=Windows 10 (10.0.19044.2846/21H2/November2021Update) AMD Ryzen 9 5950X, 1 CPU, 32 logical and 16 physical cores"><pre><span class="pl-k">OS</span>=Windows 10 (10.0.19044.2846/21H2/November2021Update) AMD Ryzen 9 5950X, 1 CPU, 32 logical and 16 physical cores</pre></div> </li> <li><code>Apple M1</code> (Virtual) ARM64 Platform Information <div class="highlight highlight-source-ini notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="OS=macOS Sonoma 14.7.1 (23H222) [Darwin 23.6.0] Apple M1 (Virtual), 1 CPU, 3 logical and 3 physical cores"><pre><span class="pl-k">OS</span>=macOS Sonoma 14.7.1 (23H222) [Darwin 23.6.0] Apple M1 (Virtual), 1 CPU, 3 logical and 3 physical cores</pre></div> </li> </ul> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Reader Comparison Benchmarks</h3><a id="user-content-reader-comparison-benchmarks" class="anchor" aria-label="Permalink: Reader Comparison Benchmarks" href="#reader-comparison-benchmarks"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">The following reader scenarios are benchmarked:</p> <ul dir="auto"> <li><a href="https://github.com/joelverhagen/NCsvPerf">NCsvPerf</a> from <a href="https://www.joelverhagen.com/blog/2020/12/fastest-net-csv-parsers" rel="nofollow">The fastest CSV parser in .NET</a></li> <li><a href="#floats-reader-comparison-benchmarks"><strong>Floats</strong></a> as for example in machine learning.</li> </ul> <p dir="auto">Details for each can be found in the following. However, for each of these 3 different scopes are benchmarked to better assertain the low-level performance of each library and approach and what parts of the parsing consume the most time:</p> <ul dir="auto"> <li><strong>Row</strong> - for this scope only the row is enumerated. That is, for Sep all that is done is: <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="foreach (var row in reader) { }"><pre><span class="pl-k">foreach</span> <span class="pl-kos">(</span><span class="pl-k">var</span> <span class="pl-s1">row</span> <span class="pl-k">in</span> <span class="pl-s1">reader</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span></pre></div> this should capture parsing both row and columns but without accessing these. Note that some libraries (like Sylvan) will defer work for columns to when these are accessed.</li> <li><strong>Cols</strong> - for this scope all rows and all columns are enumerated. If possible columns are accessed as spans, if not as strings, which then might mean a string has to be allocated. That is, for Sep this is: <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="foreach (var row in reader) { for (var i = 0; i &lt; row.ColCount; i++) { var span = row[i].Span; } }"><pre><span class="pl-k">foreach</span> <span class="pl-kos">(</span><span class="pl-k">var</span> <span class="pl-s1">row</span> <span class="pl-k">in</span> <span class="pl-s1">reader</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">for</span> <span class="pl-kos">(</span><span class="pl-k">var</span> <span class="pl-s1">i</span> <span class="pl-c1">=</span> <span class="pl-c1">0</span><span class="pl-kos">;</span> <span class="pl-s1">i</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">row</span><span class="pl-kos">.</span><span class="pl-s1">ColCount</span><span class="pl-kos">;</span> <span class="pl-s1">i</span><span class="pl-c1">++</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">var</span> <span class="pl-s1">span</span> <span class="pl-c1">=</span> <span class="pl-s1">row</span><span class="pl-kos">[</span><span class="pl-s1">i</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-s1">Span</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span></pre></div> </li> <li><strong>XYZ</strong> - finally the full scope is performed which is specific to each of the scenarios.</li> </ul> <p dir="auto">Additionally, as Sep supports multi-threaded parsing via <code>ParallelEnumerate</code> benchmarks results with <code>_MT</code> in the method name are multi-threaded. These show Sep provides unparalleled performance compared to any other CSV parser.</p> <p dir="auto">The overhead of Sep async support is also benchmarked and can be seen with <code>_Async</code> in the method name. Note that this is the absolute best case for async given there is no real IO involved and hence no actual asynchronous work or continuations (thus no <code>Task</code> allocations) since benchmarks run from memory only. This is fine as the main purpose of the benchmark is to gauge the overhead of the async code path.</p> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">NCsvPerf PackageAssets Reader Comparison Benchmarks</h4><a id="user-content-ncsvperf-packageassets-reader-comparison-benchmarks" class="anchor" aria-label="Permalink: NCsvPerf PackageAssets Reader Comparison Benchmarks" href="#ncsvperf-packageassets-reader-comparison-benchmarks"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto"><a href="https://github.com/joelverhagen/NCsvPerf">NCsvPerf</a> from <a href="https://www.joelverhagen.com/blog/2020/12/fastest-net-csv-parsers" rel="nofollow">The fastest CSV parser in .NET</a> is a benchmark which in <a href="https://twitter.com/joelverhagen" rel="nofollow">Joel Verhagen</a> own words was defined with:</p> <blockquote> <p dir="auto">My goal was to find the fastest low-level CSV parser. Essentially, all I wanted was a library that gave me a string[] for each line where each field in the line was an element in the array.</p> </blockquote> <p dir="auto">What is great about this work is it tests a whole of 35 different libraries and approaches to this. Providing a great overview of those and their performance on this specific scenario. Given Sylvan is the fastest of those it is used as the one to beat here, while CsvHelper is used to compare to the most commonly used library.</p> <p dir="auto">The source used for this benchmark <a href="/nietras/Sep/blob/main/src/Sep.ComparisonBenchmarks/PackageAssetsBench.cs">PackageAssetsBench.cs</a> is a <a href="https://raw.githubusercontent.com/joelverhagen/NCsvPerf/main/NCsvPerf/TestData/PackageAssets.csv" rel="nofollow">PackageAssets.csv</a> with NuGet package information in 25 columns with rows like:</p> <div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="75fcf875-017d-4579-bfd9-791d3e6767f0,2020-11-28T01:50:41.2449947+00:00,Akinzekeel.BlazorGrid,0.9.1-preview,2020-11-27T22:42:54.3100000+00:00,AvailableAssets,RuntimeAssemblies,,,net5.0,,,,,,lib/net5.0/BlazorGrid.dll,BlazorGrid.dll,.dll,lib,net5.0,.NETCoreApp,5.0.0.0,,,0.0.0.0 75fcf875-017d-4579-bfd9-791d3e6767f0,2020-11-28T01:50:41.2449947+00:00,Akinzekeel.BlazorGrid,0.9.1-preview,2020-11-27T22:42:54.3100000+00:00,AvailableAssets,CompileLibAssemblies,,,net5.0,,,,,,lib/net5.0/BlazorGrid.dll,BlazorGrid.dll,.dll,lib,net5.0,.NETCoreApp,5.0.0.0,,,0.0.0.0 75fcf875-017d-4579-bfd9-791d3e6767f0,2020-11-28T01:50:41.2449947+00:00,Akinzekeel.BlazorGrid,0.9.1-preview,2020-11-27T22:42:54.3100000+00:00,AvailableAssets,ResourceAssemblies,,,net5.0,,,,,,lib/net5.0/de/BlazorGrid.resources.dll,BlazorGrid.resources.dll,.dll,lib,net5.0,.NETCoreApp,5.0.0.0,,,0.0.0.0 75fcf875-017d-4579-bfd9-791d3e6767f0,2020-11-28T01:50:41.2449947+00:00,Akinzekeel.BlazorGrid,0.9.1-preview,2020-11-27T22:42:54.3100000+00:00,AvailableAssets,MSBuildFiles,,,any,,,,,,build/Microsoft.AspNetCore.StaticWebAssets.props,Microsoft.AspNetCore.StaticWebAssets.props,.props,build,any,Any,0.0.0.0,,,0.0.0.0 75fcf875-017d-4579-bfd9-791d3e6767f0,2020-11-28T01:50:41.2449947+00:00,Akinzekeel.BlazorGrid,0.9.1-preview,2020-11-27T22:42:54.3100000+00:00,AvailableAssets,MSBuildFiles,,,any,,,,,,build/Akinzekeel.BlazorGrid.props,Akinzekeel.BlazorGrid.props,.props,build,any,Any,0.0.0.0,,,0.0.0.0"><pre lang="text" class="notranslate"><code>75fcf875-017d-4579-bfd9-791d3e6767f0,2020-11-28T01:50:41.2449947+00:00,Akinzekeel.BlazorGrid,0.9.1-preview,2020-11-27T22:42:54.3100000+00:00,AvailableAssets,RuntimeAssemblies,,,net5.0,,,,,,lib/net5.0/BlazorGrid.dll,BlazorGrid.dll,.dll,lib,net5.0,.NETCoreApp,5.0.0.0,,,0.0.0.0 75fcf875-017d-4579-bfd9-791d3e6767f0,2020-11-28T01:50:41.2449947+00:00,Akinzekeel.BlazorGrid,0.9.1-preview,2020-11-27T22:42:54.3100000+00:00,AvailableAssets,CompileLibAssemblies,,,net5.0,,,,,,lib/net5.0/BlazorGrid.dll,BlazorGrid.dll,.dll,lib,net5.0,.NETCoreApp,5.0.0.0,,,0.0.0.0 75fcf875-017d-4579-bfd9-791d3e6767f0,2020-11-28T01:50:41.2449947+00:00,Akinzekeel.BlazorGrid,0.9.1-preview,2020-11-27T22:42:54.3100000+00:00,AvailableAssets,ResourceAssemblies,,,net5.0,,,,,,lib/net5.0/de/BlazorGrid.resources.dll,BlazorGrid.resources.dll,.dll,lib,net5.0,.NETCoreApp,5.0.0.0,,,0.0.0.0 75fcf875-017d-4579-bfd9-791d3e6767f0,2020-11-28T01:50:41.2449947+00:00,Akinzekeel.BlazorGrid,0.9.1-preview,2020-11-27T22:42:54.3100000+00:00,AvailableAssets,MSBuildFiles,,,any,,,,,,build/Microsoft.AspNetCore.StaticWebAssets.props,Microsoft.AspNetCore.StaticWebAssets.props,.props,build,any,Any,0.0.0.0,,,0.0.0.0 75fcf875-017d-4579-bfd9-791d3e6767f0,2020-11-28T01:50:41.2449947+00:00,Akinzekeel.BlazorGrid,0.9.1-preview,2020-11-27T22:42:54.3100000+00:00,AvailableAssets,MSBuildFiles,,,any,,,,,,build/Akinzekeel.BlazorGrid.props,Akinzekeel.BlazorGrid.props,.props,build,any,Any,0.0.0.0,,,0.0.0.0 </code></pre></div> <p dir="auto">For <code>Scope = Asset</code> the columns are parsed into a <a href="/nietras/Sep/blob/main/src/Sep.ComparisonBenchmarks/PackageAsset.cs"><code>PackageAsset</code></a> class, which consists of 25 properties of which 22 are <code>string</code>s. Each asset is accumulated into a <code>List&lt;PackageAsset&gt;</code>. Each column is accessed as a <code>string</code> regardless.</p> <p dir="auto">This means this benchmark is dominated by turning columns into <code>string</code>s for the decently fast parsers. Hence, the fastest libraries in this test employ string pooling. That is, basically a custom dictionary from <code>ReadOnlySpan&lt;char&gt;</code> to <code>string</code>, which avoids allocating a new <code>string</code> for repeated values. And as can be seen in the csv-file there are a lot of repeated values. Both Sylvan and CsvHelper do this in the benchmark. So does Sep and as with Sep this is an optional configuration that has to be explicitly enable. For Sep this means the reader is created with something like:</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="using var reader = Sep.Reader(o =&gt; o with { HasHeader = false, CreateToString = SepToString.PoolPerCol(maximumStringLength: 128), }) .From(CreateReader());"><pre><span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span>o <span class="pl-c1">=&gt;</span> <span class="pl-s1">o</span> <span class="pl-k">with</span> <span class="pl-kos">{</span> <span class="pl-s1">HasHeader</span> <span class="pl-c1">=</span> <span class="pl-c1">false</span><span class="pl-kos">,</span> <span class="pl-s1">CreateToString</span> <span class="pl-c1">=</span> <span class="pl-s1">SepToString</span><span class="pl-kos">.</span><span class="pl-en">PoolPerCol</span><span class="pl-kos">(</span><span class="pl-s1">maximumStringLength</span><span class="pl-c1">:</span> <span class="pl-c1">128</span><span class="pl-kos">)</span><span class="pl-kos">,</span> <span class="pl-kos">}</span><span class="pl-kos">)</span> <span class="pl-kos">.</span><span class="pl-en">From</span><span class="pl-kos">(</span><span class="pl-s1">CreateReader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <p dir="auto">What is unique for Sep is that it allows defining a pool per column e.g. via <code>SepToString.PoolPerCol(...)</code>. This is based on the fact that often each column has its own set of values or strings that may be repeated without any overlap to other columns. This also allows one to define per column specific handling of <code>ToString</code> behavior. Whether to pool or not. Or even to use a statically defined pool.</p> <p dir="auto">Sep supports unescaping via an option, see <a href="#sepreaderoptions">SepReaderOptions</a> and <a href="#unescaping">Unescaping</a>. Therefore, Sep has two methods being tested. The default <code>Sep</code> without unescaping and <code>Sep_Unescape</code> where unescaping is enabled. Note that only if there are quotes will there be any unescaping, but to support unescape one has to track extra state during parsing which means there is a slight cost no matter what, most notably for the <code>Cols</code> scope. Sep is still the fastest of all (by far in many cases).</p> <div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">PackageAssets Benchmark Results</h5><a id="user-content-packageassets-benchmark-results" class="anchor" aria-label="Permalink: PackageAssets Benchmark Results" href="#packageassets-benchmark-results"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">The results below show Sep is <strong>the fastest .NET CSV Parser</strong> (for this benchmark on these platforms and machines 😀). While for pure parsing allocating only a fraction of the memory due to extensive use of pooling and the <code>ArrayPool&lt;T&gt;</code>.</p> <p dir="auto">This is in many aspects due to Sep having extremely optimized string pooling and optimized hashing of <code>ReadOnlySpan&lt;char&gt;</code>, and thus not really due the the csv-parsing itself, since that is not a big part of the time consumed. At least not for a decently fast csv-parser.</p> <p dir="auto">With <code>ParallelEnumerate</code> (MT) Sep is <strong>&gt;2x faster than Sylvan and up to 9x faster than CsvHelper</strong>.</p> <div class="markdown-heading" dir="auto"><h6 tabindex="-1" class="heading-element" dir="auto">AMD.EPYC.7763 - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h6><a id="user-content-amdepyc7763---packageassets-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: AMD.EPYC.7763 - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#amdepyc7763---packageassets-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep______</td> <td>Row</td> <td>50000</td> <td align="right">3.427 ms</td> <td align="right">1.00</td> <td align="right">29</td> <td align="right">8487.1</td> <td align="right">68.5</td> <td align="right">1.02 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_Async</td> <td>Row</td> <td>50000</td> <td align="right">3.656 ms</td> <td align="right">1.07</td> <td align="right">29</td> <td align="right">7954.9</td> <td align="right">73.1</td> <td align="right">1.03 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_Unescape</td> <td>Row</td> <td>50000</td> <td align="right">3.473 ms</td> <td align="right">1.01</td> <td align="right">29</td> <td align="right">8376.0</td> <td align="right">69.5</td> <td align="right">1.15 KB</td> <td align="right">1.12</td> </tr> <tr> <td>Sylvan___</td> <td>Row</td> <td>50000</td> <td align="right">4.429 ms</td> <td align="right">1.29</td> <td align="right">29</td> <td align="right">6567.1</td> <td align="right">88.6</td> <td align="right">7.67 KB</td> <td align="right">7.48</td> </tr> <tr> <td>ReadLine_</td> <td>Row</td> <td>50000</td> <td align="right">21.587 ms</td> <td align="right">6.30</td> <td align="right">29</td> <td align="right">1347.4</td> <td align="right">431.7</td> <td align="right">88608.3 KB</td> <td align="right">86,496.57</td> </tr> <tr> <td>CsvHelper</td> <td>Row</td> <td>50000</td> <td align="right">63.743 ms</td> <td align="right">18.60</td> <td align="right">29</td> <td align="right">456.3</td> <td align="right">1274.9</td> <td align="right">20.12 KB</td> <td align="right">19.64</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Cols</td> <td>50000</td> <td align="right">4.758 ms</td> <td align="right">1.00</td> <td align="right">29</td> <td align="right">6112.5</td> <td align="right">95.2</td> <td align="right">1.04 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_Unescape</td> <td>Cols</td> <td>50000</td> <td align="right">5.691 ms</td> <td align="right">1.20</td> <td align="right">29</td> <td align="right">5110.7</td> <td align="right">113.8</td> <td align="right">1.04 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Cols</td> <td>50000</td> <td align="right">8.204 ms</td> <td align="right">1.72</td> <td align="right">29</td> <td align="right">3545.5</td> <td align="right">164.1</td> <td align="right">7.68 KB</td> <td align="right">7.42</td> </tr> <tr> <td>ReadLine_</td> <td>Cols</td> <td>50000</td> <td align="right">22.823 ms</td> <td align="right">4.80</td> <td align="right">29</td> <td align="right">1274.4</td> <td align="right">456.5</td> <td align="right">88608.31 KB</td> <td align="right">85,518.30</td> </tr> <tr> <td>CsvHelper</td> <td>Cols</td> <td>50000</td> <td align="right">110.312 ms</td> <td align="right">23.18</td> <td align="right">29</td> <td align="right">263.7</td> <td align="right">2206.2</td> <td align="right">445.93 KB</td> <td align="right">430.38</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>50000</td> <td align="right">39.731 ms</td> <td align="right">1.00</td> <td align="right">29</td> <td align="right">732.1</td> <td align="right">794.6</td> <td align="right">13803.91 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>50000</td> <td align="right">28.730 ms</td> <td align="right">0.72</td> <td align="right">29</td> <td align="right">1012.4</td> <td align="right">574.6</td> <td align="right">13858.99 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>50000</td> <td align="right">50.605 ms</td> <td align="right">1.28</td> <td align="right">29</td> <td align="right">574.8</td> <td align="right">1012.1</td> <td align="right">13963.34 KB</td> <td align="right">1.01</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>50000</td> <td align="right">125.231 ms</td> <td align="right">3.16</td> <td align="right">29</td> <td align="right">232.3</td> <td align="right">2504.6</td> <td align="right">102135 KB</td> <td align="right">7.40</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>50000</td> <td align="right">127.145 ms</td> <td align="right">3.20</td> <td align="right">29</td> <td align="right">228.8</td> <td align="right">2542.9</td> <td align="right">13971.75 KB</td> <td align="right">1.01</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>1000000</td> <td align="right">850.145 ms</td> <td align="right">1.00</td> <td align="right">581</td> <td align="right">684.4</td> <td align="right">850.1</td> <td align="right">266670.16 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>1000000</td> <td align="right">505.005 ms</td> <td align="right">0.59</td> <td align="right">581</td> <td align="right">1152.2</td> <td align="right">505.0</td> <td align="right">276118.02 KB</td> <td align="right">1.04</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>1000000</td> <td align="right">1,035.263 ms</td> <td align="right">1.22</td> <td align="right">581</td> <td align="right">562.1</td> <td align="right">1035.3</td> <td align="right">266828.4 KB</td> <td align="right">1.00</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>1000000</td> <td align="right">2,597.222 ms</td> <td align="right">3.06</td> <td align="right">581</td> <td align="right">224.0</td> <td align="right">2597.2</td> <td align="right">2038837.9 KB</td> <td align="right">7.65</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>1000000</td> <td align="right">2,649.300 ms</td> <td align="right">3.12</td> <td align="right">581</td> <td align="right">219.6</td> <td align="right">2649.3</td> <td align="right">266845.35 KB</td> <td align="right">1.00</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h6 tabindex="-1" class="heading-element" dir="auto">AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h6><a id="user-content-amdryzen7pro7840uwradeon780m---packageassets-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#amdryzen7pro7840uwradeon780m---packageassets-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep______</td> <td>Row</td> <td>50000</td> <td align="right">4.250 ms</td> <td align="right">1.00</td> <td align="right">29</td> <td align="right">6865.5</td> <td align="right">85.0</td> <td align="right">1.33 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_Async</td> <td>Row</td> <td>50000</td> <td align="right">4.447 ms</td> <td align="right">1.05</td> <td align="right">29</td> <td align="right">6562.5</td> <td align="right">88.9</td> <td align="right">1.32 KB</td> <td align="right">0.99</td> </tr> <tr> <td>Sep_Unescape</td> <td>Row</td> <td>50000</td> <td align="right">4.278 ms</td> <td align="right">1.01</td> <td align="right">29</td> <td align="right">6822.0</td> <td align="right">85.6</td> <td align="right">1.18 KB</td> <td align="right">0.89</td> </tr> <tr> <td>Sylvan___</td> <td>Row</td> <td>50000</td> <td align="right">4.768 ms</td> <td align="right">1.07</td> <td align="right">29</td> <td align="right">6119.8</td> <td align="right">95.4</td> <td align="right">7.66 KB</td> <td align="right">6.48</td> </tr> <tr> <td>ReadLine_</td> <td>Row</td> <td>50000</td> <td align="right">20.959 ms</td> <td align="right">4.71</td> <td align="right">29</td> <td align="right">1392.3</td> <td align="right">419.2</td> <td align="right">88608.26 KB</td> <td align="right">74,925.56</td> </tr> <tr> <td>CsvHelper</td> <td>Row</td> <td>50000</td> <td align="right">65.193 ms</td> <td align="right">14.64</td> <td align="right">29</td> <td align="right">447.6</td> <td align="right">1303.9</td> <td align="right">20.2 KB</td> <td align="right">17.08</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Cols</td> <td>50000</td> <td align="right">6.747 ms</td> <td align="right">1.00</td> <td align="right">29</td> <td align="right">4325.2</td> <td align="right">134.9</td> <td align="right">1.19 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_Unescape</td> <td>Cols</td> <td>50000</td> <td align="right">6.739 ms</td> <td align="right">1.00</td> <td align="right">29</td> <td align="right">4330.0</td> <td align="right">134.8</td> <td align="right">1.19 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Cols</td> <td>50000</td> <td align="right">7.509 ms</td> <td align="right">1.12</td> <td align="right">29</td> <td align="right">3885.9</td> <td align="right">150.2</td> <td align="right">7.67 KB</td> <td align="right">6.46</td> </tr> <tr> <td>ReadLine_</td> <td>Cols</td> <td>50000</td> <td align="right">23.536 ms</td> <td align="right">3.50</td> <td align="right">29</td> <td align="right">1239.9</td> <td align="right">470.7</td> <td align="right">88608.28 KB</td> <td align="right">74,617.50</td> </tr> <tr> <td>CsvHelper</td> <td>Cols</td> <td>50000</td> <td align="right">107.075 ms</td> <td align="right">15.94</td> <td align="right">29</td> <td align="right">272.5</td> <td align="right">2141.5</td> <td align="right">448.88 KB</td> <td align="right">378.00</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>50000</td> <td align="right">54.052 ms</td> <td align="right">1.00</td> <td align="right">29</td> <td align="right">539.9</td> <td align="right">1081.0</td> <td align="right">13803.3 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>50000</td> <td align="right">35.594 ms</td> <td align="right">0.66</td> <td align="right">29</td> <td align="right">819.8</td> <td align="right">711.9</td> <td align="right">13914.86 KB</td> <td align="right">1.01</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>50000</td> <td align="right">62.009 ms</td> <td align="right">1.15</td> <td align="right">29</td> <td align="right">470.6</td> <td align="right">1240.2</td> <td align="right">13962.68 KB</td> <td align="right">1.01</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>50000</td> <td align="right">201.825 ms</td> <td align="right">3.73</td> <td align="right">29</td> <td align="right">144.6</td> <td align="right">4036.5</td> <td align="right">102134.43 KB</td> <td align="right">7.40</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>50000</td> <td align="right">135.566 ms</td> <td align="right">2.51</td> <td align="right">29</td> <td align="right">215.3</td> <td align="right">2711.3</td> <td align="right">13972.69 KB</td> <td align="right">1.01</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>1000000</td> <td align="right">1,047.265 ms</td> <td align="right">1.00</td> <td align="right">583</td> <td align="right">557.4</td> <td align="right">1047.3</td> <td align="right">266672.16 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>1000000</td> <td align="right">492.995 ms</td> <td align="right">0.47</td> <td align="right">583</td> <td align="right">1184.2</td> <td align="right">493.0</td> <td align="right">267823.63 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>1000000</td> <td align="right">1,218.367 ms</td> <td align="right">1.16</td> <td align="right">583</td> <td align="right">479.2</td> <td align="right">1218.4</td> <td align="right">266825.65 KB</td> <td align="right">1.00</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>1000000</td> <td align="right">3,276.776 ms</td> <td align="right">3.13</td> <td align="right">583</td> <td align="right">178.2</td> <td align="right">3276.8</td> <td align="right">2038836.1 KB</td> <td align="right">7.65</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>1000000</td> <td align="right">2,683.525 ms</td> <td align="right">2.56</td> <td align="right">583</td> <td align="right">217.5</td> <td align="right">2683.5</td> <td align="right">266846.78 KB</td> <td align="right">1.00</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h6 tabindex="-1" class="heading-element" dir="auto">AMD.Ryzen.9.5950X - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h6><a id="user-content-amdryzen95950x---packageassets-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: AMD.Ryzen.9.5950X - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#amdryzen95950x---packageassets-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep______</td> <td>Row</td> <td>50000</td> <td align="right">2.230 ms</td> <td align="right">1.00</td> <td align="right">29</td> <td align="right">13088.4</td> <td align="right">44.6</td> <td align="right">1.09 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_Async</td> <td>Row</td> <td>50000</td> <td align="right">2.379 ms</td> <td align="right">1.07</td> <td align="right">29</td> <td align="right">12264.0</td> <td align="right">47.6</td> <td align="right">1.02 KB</td> <td align="right">0.93</td> </tr> <tr> <td>Sep_Unescape</td> <td>Row</td> <td>50000</td> <td align="right">2.305 ms</td> <td align="right">1.03</td> <td align="right">29</td> <td align="right">12657.6</td> <td align="right">46.1</td> <td align="right">1.02 KB</td> <td align="right">0.93</td> </tr> <tr> <td>Sylvan___</td> <td>Row</td> <td>50000</td> <td align="right">2.993 ms</td> <td align="right">1.33</td> <td align="right">29</td> <td align="right">9750.2</td> <td align="right">59.9</td> <td align="right">7.65 KB</td> <td align="right">7.52</td> </tr> <tr> <td>ReadLine_</td> <td>Row</td> <td>50000</td> <td align="right">12.106 ms</td> <td align="right">5.36</td> <td align="right">29</td> <td align="right">2410.5</td> <td align="right">242.1</td> <td align="right">88608.25 KB</td> <td align="right">87,077.59</td> </tr> <tr> <td>CsvHelper</td> <td>Row</td> <td>50000</td> <td align="right">43.313 ms</td> <td align="right">19.19</td> <td align="right">29</td> <td align="right">673.7</td> <td align="right">866.3</td> <td align="right">20.04 KB</td> <td align="right">19.69</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Cols</td> <td>50000</td> <td align="right">3.211 ms</td> <td align="right">1.00</td> <td align="right">29</td> <td align="right">9089.3</td> <td align="right">64.2</td> <td align="right">1.02 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_Unescape</td> <td>Cols</td> <td>50000</td> <td align="right">3.845 ms</td> <td align="right">1.20</td> <td align="right">29</td> <td align="right">7589.1</td> <td align="right">76.9</td> <td align="right">1.02 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Cols</td> <td>50000</td> <td align="right">5.065 ms</td> <td align="right">1.58</td> <td align="right">29</td> <td align="right">5760.9</td> <td align="right">101.3</td> <td align="right">7.66 KB</td> <td align="right">7.52</td> </tr> <tr> <td>ReadLine_</td> <td>Cols</td> <td>50000</td> <td align="right">12.850 ms</td> <td align="right">4.00</td> <td align="right">29</td> <td align="right">2270.9</td> <td align="right">257.0</td> <td align="right">88608.25 KB</td> <td align="right">86,910.78</td> </tr> <tr> <td>CsvHelper</td> <td>Cols</td> <td>50000</td> <td align="right">68.999 ms</td> <td align="right">21.49</td> <td align="right">29</td> <td align="right">422.9</td> <td align="right">1380.0</td> <td align="right">445.85 KB</td> <td align="right">437.31</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>50000</td> <td align="right">33.615 ms</td> <td align="right">1.00</td> <td align="right">29</td> <td align="right">868.1</td> <td align="right">672.3</td> <td align="right">13802.47 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>50000</td> <td align="right">20.231 ms</td> <td align="right">0.60</td> <td align="right">29</td> <td align="right">1442.4</td> <td align="right">404.6</td> <td align="right">13992.1 KB</td> <td align="right">1.01</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>50000</td> <td align="right">34.762 ms</td> <td align="right">1.03</td> <td align="right">29</td> <td align="right">839.5</td> <td align="right">695.2</td> <td align="right">13962.2 KB</td> <td align="right">1.01</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>50000</td> <td align="right">97.204 ms</td> <td align="right">2.89</td> <td align="right">29</td> <td align="right">300.2</td> <td align="right">1944.1</td> <td align="right">102133.9 KB</td> <td align="right">7.40</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>50000</td> <td align="right">83.550 ms</td> <td align="right">2.49</td> <td align="right">29</td> <td align="right">349.3</td> <td align="right">1671.0</td> <td align="right">13970.66 KB</td> <td align="right">1.01</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>1000000</td> <td align="right">629.552 ms</td> <td align="right">1.00</td> <td align="right">583</td> <td align="right">927.3</td> <td align="right">629.6</td> <td align="right">266669.13 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>1000000</td> <td align="right">261.089 ms</td> <td align="right">0.41</td> <td align="right">583</td> <td align="right">2236.0</td> <td align="right">261.1</td> <td align="right">267793.45 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>1000000</td> <td align="right">761.171 ms</td> <td align="right">1.21</td> <td align="right">583</td> <td align="right">767.0</td> <td align="right">761.2</td> <td align="right">266825.09 KB</td> <td align="right">1.00</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>1000000</td> <td align="right">1,636.526 ms</td> <td align="right">2.60</td> <td align="right">583</td> <td align="right">356.7</td> <td align="right">1636.5</td> <td align="right">2038835.59 KB</td> <td align="right">7.65</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>1000000</td> <td align="right">1,754.461 ms</td> <td align="right">2.79</td> <td align="right">583</td> <td align="right">332.7</td> <td align="right">1754.5</td> <td align="right">266833.16 KB</td> <td align="right">1.00</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h6 tabindex="-1" class="heading-element" dir="auto">Apple.M1.(Virtual) - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h6><a id="user-content-applem1virtual---packageassets-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: Apple.M1.(Virtual) - PackageAssets Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#applem1virtual---packageassets-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep______</td> <td>Row</td> <td>50000</td> <td align="right">4.041 ms</td> <td align="right">1.00</td> <td align="right">29</td> <td align="right">7196.8</td> <td align="right">80.8</td> <td align="right">1033 B</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_Async</td> <td>Row</td> <td>50000</td> <td align="right">4.385 ms</td> <td align="right">1.09</td> <td align="right">29</td> <td align="right">6633.5</td> <td align="right">87.7</td> <td align="right">990 B</td> <td align="right">0.96</td> </tr> <tr> <td>Sep_Unescape</td> <td>Row</td> <td>50000</td> <td align="right">4.449 ms</td> <td align="right">1.10</td> <td align="right">29</td> <td align="right">6537.7</td> <td align="right">89.0</td> <td align="right">990 B</td> <td align="right">0.96</td> </tr> <tr> <td>Sylvan___</td> <td>Row</td> <td>50000</td> <td align="right">21.045 ms</td> <td align="right">5.22</td> <td align="right">29</td> <td align="right">1382.1</td> <td align="right">420.9</td> <td align="right">6958 B</td> <td align="right">6.74</td> </tr> <tr> <td>ReadLine_</td> <td>Row</td> <td>50000</td> <td align="right">21.449 ms</td> <td align="right">5.32</td> <td align="right">29</td> <td align="right">1356.1</td> <td align="right">429.0</td> <td align="right">90734895 B</td> <td align="right">87,836.30</td> </tr> <tr> <td>CsvHelper</td> <td>Row</td> <td>50000</td> <td align="right">46.465 ms</td> <td align="right">11.52</td> <td align="right">29</td> <td align="right">626.0</td> <td align="right">929.3</td> <td align="right">20692 B</td> <td align="right">20.03</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Cols</td> <td>50000</td> <td align="right">5.001 ms</td> <td align="right">1.00</td> <td align="right">29</td> <td align="right">5816.4</td> <td align="right">100.0</td> <td align="right">994 B</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_Unescape</td> <td>Cols</td> <td>50000</td> <td align="right">6.269 ms</td> <td align="right">1.25</td> <td align="right">29</td> <td align="right">4639.4</td> <td align="right">125.4</td> <td align="right">999 B</td> <td align="right">1.01</td> </tr> <tr> <td>Sylvan___</td> <td>Cols</td> <td>50000</td> <td align="right">23.746 ms</td> <td align="right">4.75</td> <td align="right">29</td> <td align="right">1224.9</td> <td align="right">474.9</td> <td align="right">6958 B</td> <td align="right">7.00</td> </tr> <tr> <td>ReadLine_</td> <td>Cols</td> <td>50000</td> <td align="right">21.710 ms</td> <td align="right">4.34</td> <td align="right">29</td> <td align="right">1339.7</td> <td align="right">434.2</td> <td align="right">90734901 B</td> <td align="right">91,282.60</td> </tr> <tr> <td>CsvHelper</td> <td>Cols</td> <td>50000</td> <td align="right">66.705 ms</td> <td align="right">13.34</td> <td align="right">29</td> <td align="right">436.0</td> <td align="right">1334.1</td> <td align="right">457440 B</td> <td align="right">460.20</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>50000</td> <td align="right">33.390 ms</td> <td align="right">1.00</td> <td align="right">29</td> <td align="right">871.1</td> <td align="right">667.8</td> <td align="right">14134046 B</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>50000</td> <td align="right">22.413 ms</td> <td align="right">0.67</td> <td align="right">29</td> <td align="right">1297.7</td> <td align="right">448.3</td> <td align="right">14280628 B</td> <td align="right">1.01</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>50000</td> <td align="right">53.205 ms</td> <td align="right">1.60</td> <td align="right">29</td> <td align="right">546.7</td> <td align="right">1064.1</td> <td align="right">14296832 B</td> <td align="right">1.01</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>50000</td> <td align="right">109.717 ms</td> <td align="right">3.30</td> <td align="right">29</td> <td align="right">265.1</td> <td align="right">2194.3</td> <td align="right">104585674 B</td> <td align="right">7.40</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>50000</td> <td align="right">102.502 ms</td> <td align="right">3.08</td> <td align="right">29</td> <td align="right">283.8</td> <td align="right">2050.0</td> <td align="right">14305752 B</td> <td align="right">1.01</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>1000000</td> <td align="right">657.056 ms</td> <td align="right">1.00</td> <td align="right">581</td> <td align="right">885.6</td> <td align="right">657.1</td> <td align="right">273070256 B</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>1000000</td> <td align="right">572.779 ms</td> <td align="right">0.87</td> <td align="right">581</td> <td align="right">1015.9</td> <td align="right">572.8</td> <td align="right">284492848 B</td> <td align="right">1.04</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>1000000</td> <td align="right">1,177.217 ms</td> <td align="right">1.80</td> <td align="right">581</td> <td align="right">494.3</td> <td align="right">1177.2</td> <td align="right">273228824 B</td> <td align="right">1.00</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>1000000</td> <td align="right">2,052.148 ms</td> <td align="right">3.13</td> <td align="right">581</td> <td align="right">283.5</td> <td align="right">2052.1</td> <td align="right">2087769848 B</td> <td align="right">7.65</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>1000000</td> <td align="right">1,733.243 ms</td> <td align="right">2.65</td> <td align="right">581</td> <td align="right">335.7</td> <td align="right">1733.2</td> <td align="right">273238320 B</td> <td align="right">1.00</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">PackageAssets Benchmark Results (SERVER GC)</h5><a id="user-content-packageassets-benchmark-results-server-gc" class="anchor" aria-label="Permalink: PackageAssets Benchmark Results (SERVER GC)" href="#packageassets-benchmark-results-server-gc"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">The package assets benchmark (Scope <code>Asset</code>) has a very high base load in the form of the accumulated instances of <code>PackageAsset</code> and since Sep is so fast the GC becomes a significant bottleneck for the benchmark, especially for multi-threaded parsing. Switching to <a href="https://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/workstation-server-gc" rel="nofollow">SERVER GC</a> can, therefore, provide significant speedup as can be seen below.</p> <p dir="auto">With <code>ParallelEnumerate</code> and server GC Sep is <strong>&gt;4x faster than Sylvan and up to 18x faster than CsvHelper</strong>. Breaking 4 GB/s parsing speed on package assets on 5950X.</p> <div class="markdown-heading" dir="auto"><h6 tabindex="-1" class="heading-element" dir="auto">AMD.EPYC.7763 - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h6><a id="user-content-amdepyc7763---packageassets-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: AMD.EPYC.7763 - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#amdepyc7763---packageassets-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep______</td> <td>Asset</td> <td>50000</td> <td align="right">33.15 ms</td> <td align="right">1.00</td> <td align="right">29</td> <td align="right">877.3</td> <td align="right">663.0</td> <td align="right">13.48 MB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>50000</td> <td align="right">16.87 ms</td> <td align="right">0.51</td> <td align="right">29</td> <td align="right">1724.3</td> <td align="right">337.4</td> <td align="right">13.55 MB</td> <td align="right">1.01</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>50000</td> <td align="right">45.40 ms</td> <td align="right">1.37</td> <td align="right">29</td> <td align="right">640.6</td> <td align="right">908.1</td> <td align="right">13.63 MB</td> <td align="right">1.01</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>50000</td> <td align="right">62.51 ms</td> <td align="right">1.89</td> <td align="right">29</td> <td align="right">465.3</td> <td align="right">1250.2</td> <td align="right">99.74 MB</td> <td align="right">7.40</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>50000</td> <td align="right">120.39 ms</td> <td align="right">3.63</td> <td align="right">29</td> <td align="right">241.6</td> <td align="right">2407.7</td> <td align="right">13.64 MB</td> <td align="right">1.01</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>1000000</td> <td align="right">680.86 ms</td> <td align="right">1.00</td> <td align="right">581</td> <td align="right">854.6</td> <td align="right">680.9</td> <td align="right">260.41 MB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>1000000</td> <td align="right">346.45 ms</td> <td align="right">0.51</td> <td align="right">581</td> <td align="right">1679.5</td> <td align="right">346.5</td> <td align="right">268.56 MB</td> <td align="right">1.03</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>1000000</td> <td align="right">888.66 ms</td> <td align="right">1.31</td> <td align="right">581</td> <td align="right">654.8</td> <td align="right">888.7</td> <td align="right">260.58 MB</td> <td align="right">1.00</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>1000000</td> <td align="right">1,267.46 ms</td> <td align="right">1.86</td> <td align="right">581</td> <td align="right">459.1</td> <td align="right">1267.5</td> <td align="right">1991.05 MB</td> <td align="right">7.65</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>1000000</td> <td align="right">2,478.49 ms</td> <td align="right">3.64</td> <td align="right">581</td> <td align="right">234.8</td> <td align="right">2478.5</td> <td align="right">260.58 MB</td> <td align="right">1.00</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h6 tabindex="-1" class="heading-element" dir="auto">AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h6><a id="user-content-amdryzen7pro7840uwradeon780m---packageassets-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#amdryzen7pro7840uwradeon780m---packageassets-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep______</td> <td>Asset</td> <td>50000</td> <td align="right">32.88 ms</td> <td align="right">1.00</td> <td align="right">29</td> <td align="right">887.6</td> <td align="right">657.5</td> <td align="right">13.48 MB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>50000</td> <td align="right">12.08 ms</td> <td align="right">0.37</td> <td align="right">29</td> <td align="right">2414.9</td> <td align="right">241.7</td> <td align="right">13.57 MB</td> <td align="right">1.01</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>50000</td> <td align="right">43.15 ms</td> <td align="right">1.31</td> <td align="right">29</td> <td align="right">676.3</td> <td align="right">862.9</td> <td align="right">13.63 MB</td> <td align="right">1.01</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>50000</td> <td align="right">65.30 ms</td> <td align="right">1.99</td> <td align="right">29</td> <td align="right">446.9</td> <td align="right">1305.9</td> <td align="right">99.74 MB</td> <td align="right">7.40</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>50000</td> <td align="right">117.54 ms</td> <td align="right">3.58</td> <td align="right">29</td> <td align="right">248.3</td> <td align="right">2350.9</td> <td align="right">13.64 MB</td> <td align="right">1.01</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>1000000</td> <td align="right">712.70 ms</td> <td align="right">1.00</td> <td align="right">583</td> <td align="right">819.1</td> <td align="right">712.7</td> <td align="right">260.41 MB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>1000000</td> <td align="right">279.00 ms</td> <td align="right">0.39</td> <td align="right">583</td> <td align="right">2092.4</td> <td align="right">279.0</td> <td align="right">262.79 MB</td> <td align="right">1.01</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>1000000</td> <td align="right">920.38 ms</td> <td align="right">1.29</td> <td align="right">583</td> <td align="right">634.3</td> <td align="right">920.4</td> <td align="right">260.57 MB</td> <td align="right">1.00</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>1000000</td> <td align="right">1,078.15 ms</td> <td align="right">1.52</td> <td align="right">583</td> <td align="right">541.5</td> <td align="right">1078.2</td> <td align="right">1991.05 MB</td> <td align="right">7.65</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>1000000</td> <td align="right">2,417.96 ms</td> <td align="right">3.40</td> <td align="right">583</td> <td align="right">241.4</td> <td align="right">2418.0</td> <td align="right">260.58 MB</td> <td align="right">1.00</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h6 tabindex="-1" class="heading-element" dir="auto">AMD.Ryzen.9.5950X - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h6><a id="user-content-amdryzen95950x---packageassets-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: AMD.Ryzen.9.5950X - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#amdryzen95950x---packageassets-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep______</td> <td>Asset</td> <td>50000</td> <td align="right">20.951 ms</td> <td align="right">1.00</td> <td align="right">29</td> <td align="right">1392.9</td> <td align="right">419.0</td> <td align="right">13.48 MB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>50000</td> <td align="right">6.614 ms</td> <td align="right">0.32</td> <td align="right">29</td> <td align="right">4411.8</td> <td align="right">132.3</td> <td align="right">13.64 MB</td> <td align="right">1.01</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>50000</td> <td align="right">27.761 ms</td> <td align="right">1.33</td> <td align="right">29</td> <td align="right">1051.2</td> <td align="right">555.2</td> <td align="right">13.63 MB</td> <td align="right">1.01</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>50000</td> <td align="right">33.516 ms</td> <td align="right">1.60</td> <td align="right">29</td> <td align="right">870.7</td> <td align="right">670.3</td> <td align="right">99.74 MB</td> <td align="right">7.40</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>50000</td> <td align="right">77.007 ms</td> <td align="right">3.68</td> <td align="right">29</td> <td align="right">378.9</td> <td align="right">1540.1</td> <td align="right">13.64 MB</td> <td align="right">1.01</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>1000000</td> <td align="right">432.887 ms</td> <td align="right">1.00</td> <td align="right">583</td> <td align="right">1348.6</td> <td align="right">432.9</td> <td align="right">260.41 MB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>1000000</td> <td align="right">119.430 ms</td> <td align="right">0.28</td> <td align="right">583</td> <td align="right">4888.1</td> <td align="right">119.4</td> <td align="right">261.39 MB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>1000000</td> <td align="right">559.550 ms</td> <td align="right">1.29</td> <td align="right">583</td> <td align="right">1043.3</td> <td align="right">559.6</td> <td align="right">260.57 MB</td> <td align="right">1.00</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>1000000</td> <td align="right">573.637 ms</td> <td align="right">1.33</td> <td align="right">583</td> <td align="right">1017.7</td> <td align="right">573.6</td> <td align="right">1991.05 MB</td> <td align="right">7.65</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>1000000</td> <td align="right">1,537.602 ms</td> <td align="right">3.55</td> <td align="right">583</td> <td align="right">379.7</td> <td align="right">1537.6</td> <td align="right">260.58 MB</td> <td align="right">1.00</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h6 tabindex="-1" class="heading-element" dir="auto">Apple.M1.(Virtual) - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h6><a id="user-content-applem1virtual---packageassets-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: Apple.M1.(Virtual) - PackageAssets Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#applem1virtual---packageassets-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep______</td> <td>Asset</td> <td>50000</td> <td align="right">26.05 ms</td> <td align="right">1.00</td> <td align="right">29</td> <td align="right">1116.6</td> <td align="right">521.0</td> <td align="right">13.48 MB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>50000</td> <td align="right">11.03 ms</td> <td align="right">0.42</td> <td align="right">29</td> <td align="right">2636.5</td> <td align="right">220.6</td> <td align="right">13.59 MB</td> <td align="right">1.01</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>50000</td> <td align="right">48.67 ms</td> <td align="right">1.87</td> <td align="right">29</td> <td align="right">597.6</td> <td align="right">973.4</td> <td align="right">13.63 MB</td> <td align="right">1.01</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>50000</td> <td align="right">34.94 ms</td> <td align="right">1.34</td> <td align="right">29</td> <td align="right">832.4</td> <td align="right">698.9</td> <td align="right">99.74 MB</td> <td align="right">7.40</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>50000</td> <td align="right">73.10 ms</td> <td align="right">2.81</td> <td align="right">29</td> <td align="right">397.9</td> <td align="right">1461.9</td> <td align="right">13.64 MB</td> <td align="right">1.01</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>1000000</td> <td align="right">507.79 ms</td> <td align="right">1.00</td> <td align="right">581</td> <td align="right">1145.9</td> <td align="right">507.8</td> <td align="right">260.41 MB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>1000000</td> <td align="right">204.22 ms</td> <td align="right">0.40</td> <td align="right">581</td> <td align="right">2849.3</td> <td align="right">204.2</td> <td align="right">269.28 MB</td> <td align="right">1.03</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>1000000</td> <td align="right">991.41 ms</td> <td align="right">1.95</td> <td align="right">581</td> <td align="right">586.9</td> <td align="right">991.4</td> <td align="right">260.57 MB</td> <td align="right">1.00</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>1000000</td> <td align="right">1,083.07 ms</td> <td align="right">2.13</td> <td align="right">581</td> <td align="right">537.2</td> <td align="right">1083.1</td> <td align="right">1991.05 MB</td> <td align="right">7.65</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>1000000</td> <td align="right">1,924.79 ms</td> <td align="right">3.79</td> <td align="right">581</td> <td align="right">302.3</td> <td align="right">1924.8</td> <td align="right">260.58 MB</td> <td align="right">1.00</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">PackageAssets with Quotes Benchmark Results</h5><a id="user-content-packageassets-with-quotes-benchmark-results" class="anchor" aria-label="Permalink: PackageAssets with Quotes Benchmark Results" href="#packageassets-with-quotes-benchmark-results"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto"><code>NCsvPerf</code> does not examine performance in the face of quotes in the csv. This is relevant since some libraries like Sylvan will revert to a slower (not SIMD vectorized) parsing code path if it encounters quotes. Sep was designed to always use SIMD vectorization no matter what.</p> <p dir="auto">Since there are two extra <code>char</code>s to handle per column, it does have a significant impact on performance, no matter what though. This is expected when looking at the numbers. For each row of 25 columns, there are 24 separators (here <code>,</code>) and one set of line endings (here <code>\r\n</code>). That's 26 characters. Adding quotes around each of the 25 columns will add 50 characters or almost triple the total to 76.</p> <div class="markdown-heading" dir="auto"><h6 tabindex="-1" class="heading-element" dir="auto">AMD.EPYC.7763 - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h6><a id="user-content-amdepyc7763---packageassets-with-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: AMD.EPYC.7763 - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#amdepyc7763---packageassets-with-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep______</td> <td>Row</td> <td>50000</td> <td align="right">10.55 ms</td> <td align="right">1.00</td> <td align="right">33</td> <td align="right">3154.2</td> <td align="right">211.0</td> <td align="right">1.06 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_Async</td> <td>Row</td> <td>50000</td> <td align="right">12.02 ms</td> <td align="right">1.14</td> <td align="right">33</td> <td align="right">2768.6</td> <td align="right">240.4</td> <td align="right">1.06 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_Unescape</td> <td>Row</td> <td>50000</td> <td align="right">10.44 ms</td> <td align="right">0.99</td> <td align="right">33</td> <td align="right">3189.2</td> <td align="right">208.7</td> <td align="right">1.06 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Row</td> <td>50000</td> <td align="right">25.83 ms</td> <td align="right">2.45</td> <td align="right">33</td> <td align="right">1288.3</td> <td align="right">516.7</td> <td align="right">7.74 KB</td> <td align="right">7.30</td> </tr> <tr> <td>ReadLine_</td> <td>Row</td> <td>50000</td> <td align="right">25.94 ms</td> <td align="right">2.46</td> <td align="right">33</td> <td align="right">1282.8</td> <td align="right">518.9</td> <td align="right">108778.82 KB</td> <td align="right">102,568.61</td> </tr> <tr> <td>CsvHelper</td> <td>Row</td> <td>50000</td> <td align="right">77.25 ms</td> <td align="right">7.32</td> <td align="right">33</td> <td align="right">430.8</td> <td align="right">1545.0</td> <td align="right">20.29 KB</td> <td align="right">19.13</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Cols</td> <td>50000</td> <td align="right">12.01 ms</td> <td align="right">1.00</td> <td align="right">33</td> <td align="right">2770.2</td> <td align="right">240.3</td> <td align="right">1.07 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_Unescape</td> <td>Cols</td> <td>50000</td> <td align="right">13.29 ms</td> <td align="right">1.11</td> <td align="right">33</td> <td align="right">2505.2</td> <td align="right">265.7</td> <td align="right">1.08 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Cols</td> <td>50000</td> <td align="right">29.56 ms</td> <td align="right">2.46</td> <td align="right">33</td> <td align="right">1126.0</td> <td align="right">591.2</td> <td align="right">7.76 KB</td> <td align="right">7.24</td> </tr> <tr> <td>ReadLine_</td> <td>Cols</td> <td>50000</td> <td align="right">27.61 ms</td> <td align="right">2.30</td> <td align="right">33</td> <td align="right">1205.6</td> <td align="right">552.1</td> <td align="right">108778.82 KB</td> <td align="right">101,447.64</td> </tr> <tr> <td>CsvHelper</td> <td>Cols</td> <td>50000</td> <td align="right">107.02 ms</td> <td align="right">8.91</td> <td align="right">33</td> <td align="right">311.0</td> <td align="right">2140.3</td> <td align="right">445.93 KB</td> <td align="right">415.88</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>50000</td> <td align="right">47.85 ms</td> <td align="right">1.00</td> <td align="right">33</td> <td align="right">695.6</td> <td align="right">956.9</td> <td align="right">13802.84 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>50000</td> <td align="right">30.16 ms</td> <td align="right">0.63</td> <td align="right">33</td> <td align="right">1103.4</td> <td align="right">603.2</td> <td align="right">13862.06 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>50000</td> <td align="right">72.55 ms</td> <td align="right">1.52</td> <td align="right">33</td> <td align="right">458.8</td> <td align="right">1450.9</td> <td align="right">13963.14 KB</td> <td align="right">1.01</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>50000</td> <td align="right">155.62 ms</td> <td align="right">3.25</td> <td align="right">33</td> <td align="right">213.9</td> <td align="right">3112.3</td> <td align="right">122305.53 KB</td> <td align="right">8.86</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>50000</td> <td align="right">126.34 ms</td> <td align="right">2.64</td> <td align="right">33</td> <td align="right">263.4</td> <td align="right">2526.8</td> <td align="right">13973.89 KB</td> <td align="right">1.01</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>1000000</td> <td align="right">986.97 ms</td> <td align="right">1.00</td> <td align="right">665</td> <td align="right">674.6</td> <td align="right">987.0</td> <td align="right">266670.24 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>1000000</td> <td align="right">587.82 ms</td> <td align="right">0.60</td> <td align="right">665</td> <td align="right">1132.7</td> <td align="right">587.8</td> <td align="right">272038.75 KB</td> <td align="right">1.02</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>1000000</td> <td align="right">1,464.19 ms</td> <td align="right">1.48</td> <td align="right">665</td> <td align="right">454.7</td> <td align="right">1464.2</td> <td align="right">266840.84 KB</td> <td align="right">1.00</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>1000000</td> <td align="right">3,142.01 ms</td> <td align="right">3.18</td> <td align="right">665</td> <td align="right">211.9</td> <td align="right">3142.0</td> <td align="right">2442321.3 KB</td> <td align="right">9.16</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>1000000</td> <td align="right">2,609.30 ms</td> <td align="right">2.64</td> <td align="right">665</td> <td align="right">255.2</td> <td align="right">2609.3</td> <td align="right">266834.41 KB</td> <td align="right">1.00</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h6 tabindex="-1" class="heading-element" dir="auto">AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h6><a id="user-content-amdryzen7pro7840uwradeon780m---packageassets-with-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#amdryzen7pro7840uwradeon780m---packageassets-with-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep______</td> <td>Row</td> <td>50000</td> <td align="right">10.41 ms</td> <td align="right">1.00</td> <td align="right">33</td> <td align="right">3206.3</td> <td align="right">208.2</td> <td align="right">1.21 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_Async</td> <td>Row</td> <td>50000</td> <td align="right">10.75 ms</td> <td align="right">1.03</td> <td align="right">33</td> <td align="right">3105.5</td> <td align="right">215.0</td> <td align="right">1.17 KB</td> <td align="right">0.97</td> </tr> <tr> <td>Sep_Unescape</td> <td>Row</td> <td>50000</td> <td align="right">10.32 ms</td> <td align="right">0.99</td> <td align="right">33</td> <td align="right">3233.3</td> <td align="right">206.5</td> <td align="right">1.21 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Row</td> <td>50000</td> <td align="right">26.60 ms</td> <td align="right">2.51</td> <td align="right">33</td> <td align="right">1254.7</td> <td align="right">532.0</td> <td align="right">7.72 KB</td> <td align="right">6.39</td> </tr> <tr> <td>ReadLine_</td> <td>Row</td> <td>50000</td> <td align="right">24.43 ms</td> <td align="right">2.30</td> <td align="right">33</td> <td align="right">1366.2</td> <td align="right">488.6</td> <td align="right">108778.79 KB</td> <td align="right">90,048.08</td> </tr> <tr> <td>CsvHelper</td> <td>Row</td> <td>50000</td> <td align="right">71.27 ms</td> <td align="right">6.72</td> <td align="right">33</td> <td align="right">468.3</td> <td align="right">1425.5</td> <td align="right">23.22 KB</td> <td align="right">19.22</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Cols</td> <td>50000</td> <td align="right">12.22 ms</td> <td align="right">1.00</td> <td align="right">33</td> <td align="right">2730.9</td> <td align="right">244.4</td> <td align="right">1.22 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_Unescape</td> <td>Cols</td> <td>50000</td> <td align="right">13.10 ms</td> <td align="right">1.07</td> <td align="right">33</td> <td align="right">2547.4</td> <td align="right">262.1</td> <td align="right">1.22 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Cols</td> <td>50000</td> <td align="right">30.00 ms</td> <td align="right">2.46</td> <td align="right">33</td> <td align="right">1112.4</td> <td align="right">600.1</td> <td align="right">7.73 KB</td> <td align="right">6.35</td> </tr> <tr> <td>ReadLine_</td> <td>Cols</td> <td>50000</td> <td align="right">25.36 ms</td> <td align="right">2.08</td> <td align="right">33</td> <td align="right">1316.0</td> <td align="right">507.3</td> <td align="right">108778.78 KB</td> <td align="right">89,397.65</td> </tr> <tr> <td>CsvHelper</td> <td>Cols</td> <td>50000</td> <td align="right">101.58 ms</td> <td align="right">8.31</td> <td align="right">33</td> <td align="right">328.6</td> <td align="right">2031.6</td> <td align="right">445.86 KB</td> <td align="right">366.42</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>50000</td> <td align="right">59.31 ms</td> <td align="right">1.00</td> <td align="right">33</td> <td align="right">562.8</td> <td align="right">1186.2</td> <td align="right">13803.31 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>50000</td> <td align="right">41.53 ms</td> <td align="right">0.70</td> <td align="right">33</td> <td align="right">803.6</td> <td align="right">830.7</td> <td align="right">13939.88 KB</td> <td align="right">1.01</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>50000</td> <td align="right">81.00 ms</td> <td align="right">1.37</td> <td align="right">33</td> <td align="right">412.1</td> <td align="right">1619.9</td> <td align="right">13962.41 KB</td> <td align="right">1.01</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>50000</td> <td align="right">244.05 ms</td> <td align="right">4.12</td> <td align="right">33</td> <td align="right">136.8</td> <td align="right">4881.0</td> <td align="right">122304.87 KB</td> <td align="right">8.86</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>50000</td> <td align="right">134.78 ms</td> <td align="right">2.27</td> <td align="right">33</td> <td align="right">247.7</td> <td align="right">2695.5</td> <td align="right">13973.52 KB</td> <td align="right">1.01</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>1000000</td> <td align="right">1,168.49 ms</td> <td align="right">1.00</td> <td align="right">667</td> <td align="right">571.4</td> <td align="right">1168.5</td> <td align="right">266670.8 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>1000000</td> <td align="right">670.66 ms</td> <td align="right">0.57</td> <td align="right">667</td> <td align="right">995.6</td> <td align="right">670.7</td> <td align="right">268687.83 KB</td> <td align="right">1.01</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>1000000</td> <td align="right">1,636.51 ms</td> <td align="right">1.40</td> <td align="right">667</td> <td align="right">408.0</td> <td align="right">1636.5</td> <td align="right">266825.86 KB</td> <td align="right">1.00</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>1000000</td> <td align="right">4,203.80 ms</td> <td align="right">3.60</td> <td align="right">667</td> <td align="right">158.8</td> <td align="right">4203.8</td> <td align="right">2442318.99 KB</td> <td align="right">9.16</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>1000000</td> <td align="right">2,561.09 ms</td> <td align="right">2.19</td> <td align="right">667</td> <td align="right">260.7</td> <td align="right">2561.1</td> <td align="right">266837.54 KB</td> <td align="right">1.00</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h6 tabindex="-1" class="heading-element" dir="auto">AMD.Ryzen.9.5950X - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h6><a id="user-content-amdryzen95950x---packageassets-with-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: AMD.Ryzen.9.5950X - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#amdryzen95950x---packageassets-with-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep______</td> <td>Row</td> <td>50000</td> <td align="right">7.046 ms</td> <td align="right">1.00</td> <td align="right">33</td> <td align="right">4737.2</td> <td align="right">140.9</td> <td align="right">1.04 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_Async</td> <td>Row</td> <td>50000</td> <td align="right">8.137 ms</td> <td align="right">1.15</td> <td align="right">33</td> <td align="right">4101.8</td> <td align="right">162.7</td> <td align="right">1.04 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_Unescape</td> <td>Row</td> <td>50000</td> <td align="right">7.473 ms</td> <td align="right">1.06</td> <td align="right">33</td> <td align="right">4466.7</td> <td align="right">149.5</td> <td align="right">1.04 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Row</td> <td>50000</td> <td align="right">17.571 ms</td> <td align="right">2.38</td> <td align="right">33</td> <td align="right">1899.5</td> <td align="right">351.4</td> <td align="right">7.69 KB</td> <td align="right">7.41</td> </tr> <tr> <td>ReadLine_</td> <td>Row</td> <td>50000</td> <td align="right">14.336 ms</td> <td align="right">1.94</td> <td align="right">33</td> <td align="right">2328.2</td> <td align="right">286.7</td> <td align="right">108778.75 KB</td> <td align="right">104,689.33</td> </tr> <tr> <td>CsvHelper</td> <td>Row</td> <td>50000</td> <td align="right">52.672 ms</td> <td align="right">7.12</td> <td align="right">33</td> <td align="right">633.7</td> <td align="right">1053.4</td> <td align="right">20.05 KB</td> <td align="right">19.29</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Cols</td> <td>50000</td> <td align="right">8.126 ms</td> <td align="right">1.00</td> <td align="right">33</td> <td align="right">4107.5</td> <td align="right">162.5</td> <td align="right">1.04 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_Unescape</td> <td>Cols</td> <td>50000</td> <td align="right">9.748 ms</td> <td align="right">1.20</td> <td align="right">33</td> <td align="right">3424.0</td> <td align="right">195.0</td> <td align="right">1.05 KB</td> <td align="right">1.01</td> </tr> <tr> <td>Sylvan___</td> <td>Cols</td> <td>50000</td> <td align="right">20.503 ms</td> <td align="right">2.52</td> <td align="right">33</td> <td align="right">1628.0</td> <td align="right">410.1</td> <td align="right">7.7 KB</td> <td align="right">7.39</td> </tr> <tr> <td>ReadLine_</td> <td>Cols</td> <td>50000</td> <td align="right">16.513 ms</td> <td align="right">2.03</td> <td align="right">33</td> <td align="right">2021.3</td> <td align="right">330.3</td> <td align="right">108778.76 KB</td> <td align="right">104,394.99</td> </tr> <tr> <td>CsvHelper</td> <td>Cols</td> <td>50000</td> <td align="right">74.224 ms</td> <td align="right">9.13</td> <td align="right">33</td> <td align="right">449.7</td> <td align="right">1484.5</td> <td align="right">445.85 KB</td> <td align="right">427.88</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>50000</td> <td align="right">39.523 ms</td> <td align="right">1.00</td> <td align="right">33</td> <td align="right">844.5</td> <td align="right">790.5</td> <td align="right">13802.63 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>50000</td> <td align="right">23.386 ms</td> <td align="right">0.59</td> <td align="right">33</td> <td align="right">1427.2</td> <td align="right">467.7</td> <td align="right">13981.76 KB</td> <td align="right">1.01</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>50000</td> <td align="right">50.803 ms</td> <td align="right">1.29</td> <td align="right">33</td> <td align="right">657.0</td> <td align="right">1016.1</td> <td align="right">13962.08 KB</td> <td align="right">1.01</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>50000</td> <td align="right">114.306 ms</td> <td align="right">2.89</td> <td align="right">33</td> <td align="right">292.0</td> <td align="right">2286.1</td> <td align="right">122304.45 KB</td> <td align="right">8.86</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>50000</td> <td align="right">88.786 ms</td> <td align="right">2.25</td> <td align="right">33</td> <td align="right">375.9</td> <td align="right">1775.7</td> <td align="right">13970.43 KB</td> <td align="right">1.01</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>1000000</td> <td align="right">752.681 ms</td> <td align="right">1.00</td> <td align="right">667</td> <td align="right">887.1</td> <td align="right">752.7</td> <td align="right">266669 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>1000000</td> <td align="right">377.733 ms</td> <td align="right">0.50</td> <td align="right">667</td> <td align="right">1767.7</td> <td align="right">377.7</td> <td align="right">267992.5 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>1000000</td> <td align="right">1,091.345 ms</td> <td align="right">1.45</td> <td align="right">667</td> <td align="right">611.8</td> <td align="right">1091.3</td> <td align="right">266825.09 KB</td> <td align="right">1.00</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>1000000</td> <td align="right">2,615.390 ms</td> <td align="right">3.47</td> <td align="right">667</td> <td align="right">255.3</td> <td align="right">2615.4</td> <td align="right">2442319.06 KB</td> <td align="right">9.16</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>1000000</td> <td align="right">1,756.409 ms</td> <td align="right">2.33</td> <td align="right">667</td> <td align="right">380.2</td> <td align="right">1756.4</td> <td align="right">266839.53 KB</td> <td align="right">1.00</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h6 tabindex="-1" class="heading-element" dir="auto">Apple.M1.(Virtual) - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h6><a id="user-content-applem1virtual---packageassets-with-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: Apple.M1.(Virtual) - PackageAssets with Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#applem1virtual---packageassets-with-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep______</td> <td>Row</td> <td>50000</td> <td align="right">12.18 ms</td> <td align="right">1.01</td> <td align="right">33</td> <td align="right">2732.2</td> <td align="right">243.6</td> <td align="right">1.09 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_Async</td> <td>Row</td> <td>50000</td> <td align="right">11.74 ms</td> <td align="right">0.97</td> <td align="right">33</td> <td align="right">2835.4</td> <td align="right">234.8</td> <td align="right">1 KB</td> <td align="right">0.92</td> </tr> <tr> <td>Sep_Unescape</td> <td>Row</td> <td>50000</td> <td align="right">11.10 ms</td> <td align="right">0.92</td> <td align="right">33</td> <td align="right">2997.8</td> <td align="right">222.0</td> <td align="right">1 KB</td> <td align="right">0.92</td> </tr> <tr> <td>Sylvan___</td> <td>Row</td> <td>50000</td> <td align="right">24.97 ms</td> <td align="right">2.06</td> <td align="right">33</td> <td align="right">1332.7</td> <td align="right">499.5</td> <td align="right">6.79 KB</td> <td align="right">6.25</td> </tr> <tr> <td>ReadLine_</td> <td>Row</td> <td>50000</td> <td align="right">26.23 ms</td> <td align="right">2.17</td> <td align="right">33</td> <td align="right">1269.0</td> <td align="right">524.5</td> <td align="right">108778.81 KB</td> <td align="right">100,080.42</td> </tr> <tr> <td>CsvHelper</td> <td>Row</td> <td>50000</td> <td align="right">49.35 ms</td> <td align="right">4.08</td> <td align="right">33</td> <td align="right">674.4</td> <td align="right">986.9</td> <td align="right">20.09 KB</td> <td align="right">18.49</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Cols</td> <td>50000</td> <td align="right">12.41 ms</td> <td align="right">1.00</td> <td align="right">33</td> <td align="right">2681.1</td> <td align="right">248.3</td> <td align="right">1.01 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_Unescape</td> <td>Cols</td> <td>50000</td> <td align="right">14.75 ms</td> <td align="right">1.19</td> <td align="right">33</td> <td align="right">2256.8</td> <td align="right">295.0</td> <td align="right">1.01 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Cols</td> <td>50000</td> <td align="right">26.17 ms</td> <td align="right">2.11</td> <td align="right">33</td> <td align="right">1271.6</td> <td align="right">523.5</td> <td align="right">6.79 KB</td> <td align="right">6.72</td> </tr> <tr> <td>ReadLine_</td> <td>Cols</td> <td>50000</td> <td align="right">25.07 ms</td> <td align="right">2.02</td> <td align="right">33</td> <td align="right">1327.5</td> <td align="right">501.4</td> <td align="right">108778.8 KB</td> <td align="right">107,622.70</td> </tr> <tr> <td>CsvHelper</td> <td>Cols</td> <td>50000</td> <td align="right">78.74 ms</td> <td align="right">6.35</td> <td align="right">33</td> <td align="right">422.7</td> <td align="right">1574.8</td> <td align="right">446.72 KB</td> <td align="right">441.97</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>50000</td> <td align="right">39.11 ms</td> <td align="right">1.00</td> <td align="right">33</td> <td align="right">851.0</td> <td align="right">782.1</td> <td align="right">13802.77 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>50000</td> <td align="right">30.33 ms</td> <td align="right">0.78</td> <td align="right">33</td> <td align="right">1097.4</td> <td align="right">606.5</td> <td align="right">13876.85 KB</td> <td align="right">1.01</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>50000</td> <td align="right">56.15 ms</td> <td align="right">1.44</td> <td align="right">33</td> <td align="right">592.7</td> <td align="right">1123.1</td> <td align="right">13961.25 KB</td> <td align="right">1.01</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>50000</td> <td align="right">127.77 ms</td> <td align="right">3.28</td> <td align="right">33</td> <td align="right">260.5</td> <td align="right">2555.5</td> <td align="right">122305.8 KB</td> <td align="right">8.86</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>50000</td> <td align="right">80.19 ms</td> <td align="right">2.06</td> <td align="right">33</td> <td align="right">415.1</td> <td align="right">1603.7</td> <td align="right">13971.07 KB</td> <td align="right">1.01</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>1000000</td> <td align="right">794.37 ms</td> <td align="right">1.00</td> <td align="right">665</td> <td align="right">838.1</td> <td align="right">794.4</td> <td align="right">266670.09 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>1000000</td> <td align="right">623.62 ms</td> <td align="right">0.79</td> <td align="right">665</td> <td align="right">1067.6</td> <td align="right">623.6</td> <td align="right">275579.94 KB</td> <td align="right">1.03</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>1000000</td> <td align="right">1,218.66 ms</td> <td align="right">1.54</td> <td align="right">665</td> <td align="right">546.3</td> <td align="right">1218.7</td> <td align="right">266825.24 KB</td> <td align="right">1.00</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>1000000</td> <td align="right">2,426.00 ms</td> <td align="right">3.06</td> <td align="right">665</td> <td align="right">274.4</td> <td align="right">2426.0</td> <td align="right">2442322 KB</td> <td align="right">9.16</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>1000000</td> <td align="right">2,183.43 ms</td> <td align="right">2.75</td> <td align="right">665</td> <td align="right">304.9</td> <td align="right">2183.4</td> <td align="right">266837.34 KB</td> <td align="right">1.00</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">PackageAssets with Quotes Benchmark Results (SERVER GC)</h5><a id="user-content-packageassets-with-quotes-benchmark-results-server-gc" class="anchor" aria-label="Permalink: PackageAssets with Quotes Benchmark Results (SERVER GC)" href="#packageassets-with-quotes-benchmark-results-server-gc"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Here again are benchmark results with server garbage collection, which provides significant speedup over workstation garbage collection.</p> <div class="markdown-heading" dir="auto"><h6 tabindex="-1" class="heading-element" dir="auto">AMD.EPYC.7763 - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h6><a id="user-content-amdepyc7763---packageassets-with-quotes-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: AMD.EPYC.7763 - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#amdepyc7763---packageassets-with-quotes-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep______</td> <td>Asset</td> <td>50000</td> <td align="right">39.11 ms</td> <td align="right">1.00</td> <td align="right">33</td> <td align="right">851.0</td> <td align="right">782.2</td> <td align="right">13.48 MB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>50000</td> <td align="right">23.02 ms</td> <td align="right">0.59</td> <td align="right">33</td> <td align="right">1445.6</td> <td align="right">460.5</td> <td align="right">13.53 MB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>50000</td> <td align="right">64.15 ms</td> <td align="right">1.64</td> <td align="right">33</td> <td align="right">518.8</td> <td align="right">1283.0</td> <td align="right">13.63 MB</td> <td align="right">1.01</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>50000</td> <td align="right">69.84 ms</td> <td align="right">1.79</td> <td align="right">33</td> <td align="right">476.5</td> <td align="right">1396.8</td> <td align="right">119.44 MB</td> <td align="right">8.86</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>50000</td> <td align="right">119.33 ms</td> <td align="right">3.05</td> <td align="right">33</td> <td align="right">278.9</td> <td align="right">2386.7</td> <td align="right">13.64 MB</td> <td align="right">1.01</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>1000000</td> <td align="right">851.15 ms</td> <td align="right">1.00</td> <td align="right">665</td> <td align="right">782.2</td> <td align="right">851.1</td> <td align="right">260.41 MB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>1000000</td> <td align="right">433.22 ms</td> <td align="right">0.51</td> <td align="right">665</td> <td align="right">1536.9</td> <td align="right">433.2</td> <td align="right">262.82 MB</td> <td align="right">1.01</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>1000000</td> <td align="right">1,328.75 ms</td> <td align="right">1.56</td> <td align="right">665</td> <td align="right">501.1</td> <td align="right">1328.7</td> <td align="right">260.57 MB</td> <td align="right">1.00</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>1000000</td> <td align="right">1,477.57 ms</td> <td align="right">1.74</td> <td align="right">665</td> <td align="right">450.6</td> <td align="right">1477.6</td> <td align="right">2385.07 MB</td> <td align="right">9.16</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>1000000</td> <td align="right">2,519.43 ms</td> <td align="right">2.96</td> <td align="right">665</td> <td align="right">264.3</td> <td align="right">2519.4</td> <td align="right">260.59 MB</td> <td align="right">1.00</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h6 tabindex="-1" class="heading-element" dir="auto">AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h6><a id="user-content-amdryzen7pro7840uwradeon780m---packageassets-with-quotes-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#amdryzen7pro7840uwradeon780m---packageassets-with-quotes-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep______</td> <td>Asset</td> <td>50000</td> <td align="right">40.64 ms</td> <td align="right">1.00</td> <td align="right">33</td> <td align="right">821.3</td> <td align="right">812.8</td> <td align="right">13.48 MB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>50000</td> <td align="right">22.02 ms</td> <td align="right">0.54</td> <td align="right">33</td> <td align="right">1515.5</td> <td align="right">440.5</td> <td align="right">13.59 MB</td> <td align="right">1.01</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>50000</td> <td align="right">65.40 ms</td> <td align="right">1.61</td> <td align="right">33</td> <td align="right">510.3</td> <td align="right">1308.1</td> <td align="right">13.63 MB</td> <td align="right">1.01</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>50000</td> <td align="right">86.96 ms</td> <td align="right">2.14</td> <td align="right">33</td> <td align="right">383.8</td> <td align="right">1739.1</td> <td align="right">119.44 MB</td> <td align="right">8.86</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>50000</td> <td align="right">113.09 ms</td> <td align="right">2.78</td> <td align="right">33</td> <td align="right">295.1</td> <td align="right">2261.8</td> <td align="right">13.64 MB</td> <td align="right">1.01</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>1000000</td> <td align="right">837.08 ms</td> <td align="right">1.00</td> <td align="right">667</td> <td align="right">797.7</td> <td align="right">837.1</td> <td align="right">260.41 MB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>1000000</td> <td align="right">424.07 ms</td> <td align="right">0.51</td> <td align="right">667</td> <td align="right">1574.5</td> <td align="right">424.1</td> <td align="right">262.92 MB</td> <td align="right">1.01</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>1000000</td> <td align="right">1,355.96 ms</td> <td align="right">1.62</td> <td align="right">667</td> <td align="right">492.4</td> <td align="right">1356.0</td> <td align="right">260.57 MB</td> <td align="right">1.00</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>1000000</td> <td align="right">1,145.13 ms</td> <td align="right">1.37</td> <td align="right">667</td> <td align="right">583.1</td> <td align="right">1145.1</td> <td align="right">2385.07 MB</td> <td align="right">9.16</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>1000000</td> <td align="right">2,308.37 ms</td> <td align="right">2.76</td> <td align="right">667</td> <td align="right">289.3</td> <td align="right">2308.4</td> <td align="right">260.58 MB</td> <td align="right">1.00</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h6 tabindex="-1" class="heading-element" dir="auto">AMD.Ryzen.9.5950X - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h6><a id="user-content-amdryzen95950x---packageassets-with-quotes-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: AMD.Ryzen.9.5950X - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#amdryzen95950x---packageassets-with-quotes-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep______</td> <td>Asset</td> <td>50000</td> <td align="right">26.42 ms</td> <td align="right">1.00</td> <td align="right">33</td> <td align="right">1263.1</td> <td align="right">528.5</td> <td align="right">13.48 MB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>50000</td> <td align="right">11.53 ms</td> <td align="right">0.44</td> <td align="right">33</td> <td align="right">2894.1</td> <td align="right">230.7</td> <td align="right">13.64 MB</td> <td align="right">1.01</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>50000</td> <td align="right">43.05 ms</td> <td align="right">1.63</td> <td align="right">33</td> <td align="right">775.3</td> <td align="right">861.1</td> <td align="right">13.63 MB</td> <td align="right">1.01</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>50000</td> <td align="right">37.30 ms</td> <td align="right">1.41</td> <td align="right">33</td> <td align="right">894.8</td> <td align="right">746.0</td> <td align="right">119.44 MB</td> <td align="right">8.86</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>50000</td> <td align="right">78.91 ms</td> <td align="right">2.99</td> <td align="right">33</td> <td align="right">423.0</td> <td align="right">1578.1</td> <td align="right">13.64 MB</td> <td align="right">1.01</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>1000000</td> <td align="right">538.48 ms</td> <td align="right">1.00</td> <td align="right">667</td> <td align="right">1240.0</td> <td align="right">538.5</td> <td align="right">260.43 MB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>1000000</td> <td align="right">213.29 ms</td> <td align="right">0.40</td> <td align="right">667</td> <td align="right">3130.5</td> <td align="right">213.3</td> <td align="right">261.37 MB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>1000000</td> <td align="right">879.04 ms</td> <td align="right">1.63</td> <td align="right">667</td> <td align="right">759.6</td> <td align="right">879.0</td> <td align="right">260.57 MB</td> <td align="right">1.00</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>1000000</td> <td align="right">642.57 ms</td> <td align="right">1.19</td> <td align="right">667</td> <td align="right">1039.1</td> <td align="right">642.6</td> <td align="right">2385.07 MB</td> <td align="right">9.16</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>1000000</td> <td align="right">1,598.79 ms</td> <td align="right">2.97</td> <td align="right">667</td> <td align="right">417.6</td> <td align="right">1598.8</td> <td align="right">260.58 MB</td> <td align="right">1.00</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h6 tabindex="-1" class="heading-element" dir="auto">Apple.M1.(Virtual) - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h6><a id="user-content-applem1virtual---packageassets-with-quotes-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: Apple.M1.(Virtual) - PackageAssets with Quotes Benchmark Results (SERVER GC) (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#applem1virtual---packageassets-with-quotes-benchmark-results-server-gc-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep______</td> <td>Asset</td> <td>50000</td> <td align="right">41.29 ms</td> <td align="right">1.03</td> <td align="right">33</td> <td align="right">806.0</td> <td align="right">825.9</td> <td align="right">13.48 MB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>50000</td> <td align="right">31.46 ms</td> <td align="right">0.78</td> <td align="right">33</td> <td align="right">1058.0</td> <td align="right">629.1</td> <td align="right">13.53 MB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>50000</td> <td align="right">58.99 ms</td> <td align="right">1.47</td> <td align="right">33</td> <td align="right">564.2</td> <td align="right">1179.9</td> <td align="right">13.63 MB</td> <td align="right">1.01</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>50000</td> <td align="right">57.46 ms</td> <td align="right">1.43</td> <td align="right">33</td> <td align="right">579.2</td> <td align="right">1149.3</td> <td align="right">119.44 MB</td> <td align="right">8.86</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>50000</td> <td align="right">85.16 ms</td> <td align="right">2.12</td> <td align="right">33</td> <td align="right">390.8</td> <td align="right">1703.2</td> <td align="right">13.64 MB</td> <td align="right">1.01</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Asset</td> <td>1000000</td> <td align="right">696.42 ms</td> <td align="right">1.00</td> <td align="right">665</td> <td align="right">956.0</td> <td align="right">696.4</td> <td align="right">260.41 MB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Asset</td> <td>1000000</td> <td align="right">529.92 ms</td> <td align="right">0.76</td> <td align="right">665</td> <td align="right">1256.4</td> <td align="right">529.9</td> <td align="right">266.15 MB</td> <td align="right">1.02</td> </tr> <tr> <td>Sylvan___</td> <td>Asset</td> <td>1000000</td> <td align="right">1,168.96 ms</td> <td align="right">1.68</td> <td align="right">665</td> <td align="right">569.6</td> <td align="right">1169.0</td> <td align="right">260.57 MB</td> <td align="right">1.00</td> </tr> <tr> <td>ReadLine_</td> <td>Asset</td> <td>1000000</td> <td align="right">1,593.69 ms</td> <td align="right">2.29</td> <td align="right">665</td> <td align="right">417.8</td> <td align="right">1593.7</td> <td align="right">2385.08 MB</td> <td align="right">9.16</td> </tr> <tr> <td>CsvHelper</td> <td>Asset</td> <td>1000000</td> <td align="right">1,663.19 ms</td> <td align="right">2.39</td> <td align="right">665</td> <td align="right">400.3</td> <td align="right">1663.2</td> <td align="right">260.58 MB</td> <td align="right">1.00</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">PackageAssets with Spaces and Quotes Benchmark Results</h5><a id="user-content-packageassets-with-spaces-and-quotes-benchmark-results" class="anchor" aria-label="Permalink: PackageAssets with Spaces and Quotes Benchmark Results" href="#packageassets-with-spaces-and-quotes-benchmark-results"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Similar to the benchmark related to quotes here spaces <code> </code> and quotes <code>"</code> are added to relevant columns to benchmark impact of trimming and unescape on low level column access. That is, basically <code>"</code> is prepended and appended to each column. This will test the assumed most common case and fast path part of trimming and unescaping in Sep. Sep is about 10x faster than CsvHelper for this. Sylvan does not appear to have support automatic trimming and is, therefore, not included.</p> <div class="markdown-heading" dir="auto"><h6 tabindex="-1" class="heading-element" dir="auto">AMD.EPYC.7763 - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h6><a id="user-content-amdepyc7763---packageassets-with-spaces-and-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: AMD.EPYC.7763 - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#amdepyc7763---packageassets-with-spaces-and-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep_</td> <td>Cols</td> <td>50000</td> <td align="right">13.32 ms</td> <td align="right">1.00</td> <td align="right">41</td> <td align="right">3128.8</td> <td align="right">266.4</td> <td align="right">1.08 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_Trim</td> <td>Cols</td> <td>50000</td> <td align="right">26.13 ms</td> <td align="right">1.96</td> <td align="right">41</td> <td align="right">1595.1</td> <td align="right">522.5</td> <td align="right">1.11 KB</td> <td align="right">1.02</td> </tr> <tr> <td>Sep_TrimUnescape</td> <td>Cols</td> <td>50000</td> <td align="right">19.37 ms</td> <td align="right">1.45</td> <td align="right">41</td> <td align="right">2151.4</td> <td align="right">387.4</td> <td align="right">1.11 KB</td> <td align="right">1.03</td> </tr> <tr> <td>Sep_TrimUnescapeTrim</td> <td>Cols</td> <td>50000</td> <td align="right">21.30 ms</td> <td align="right">1.60</td> <td align="right">41</td> <td align="right">1956.4</td> <td align="right">426.0</td> <td align="right">1.11 KB</td> <td align="right">1.03</td> </tr> <tr> <td>CsvHelper_TrimUnescape</td> <td>Cols</td> <td>50000</td> <td align="right">145.66 ms</td> <td align="right">10.94</td> <td align="right">41</td> <td align="right">286.1</td> <td align="right">2913.2</td> <td align="right">451.86 KB</td> <td align="right">418.74</td> </tr> <tr> <td>CsvHelper_TrimUnescapeTrim</td> <td>Cols</td> <td>50000</td> <td align="right">143.79 ms</td> <td align="right">10.80</td> <td align="right">41</td> <td align="right">289.8</td> <td align="right">2875.8</td> <td align="right">446.2 KB</td> <td align="right">413.49</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h6 tabindex="-1" class="heading-element" dir="auto">AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h6><a id="user-content-amdryzen7pro7840uwradeon780m---packageassets-with-spaces-and-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#amdryzen7pro7840uwradeon780m---packageassets-with-spaces-and-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep_</td> <td>Cols</td> <td>50000</td> <td align="right">13.52 ms</td> <td align="right">1.00</td> <td align="right">41</td> <td align="right">3089.2</td> <td align="right">270.4</td> <td align="right">1.22 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_Trim</td> <td>Cols</td> <td>50000</td> <td align="right">18.53 ms</td> <td align="right">1.37</td> <td align="right">41</td> <td align="right">2253.9</td> <td align="right">370.6</td> <td align="right">1.91 KB</td> <td align="right">1.57</td> </tr> <tr> <td>Sep_TrimUnescape</td> <td>Cols</td> <td>50000</td> <td align="right">19.87 ms</td> <td align="right">1.47</td> <td align="right">41</td> <td align="right">2102.1</td> <td align="right">397.4</td> <td align="right">1.25 KB</td> <td align="right">1.02</td> </tr> <tr> <td>Sep_TrimUnescapeTrim</td> <td>Cols</td> <td>50000</td> <td align="right">22.41 ms</td> <td align="right">1.66</td> <td align="right">41</td> <td align="right">1863.6</td> <td align="right">448.3</td> <td align="right">1.26 KB</td> <td align="right">1.03</td> </tr> <tr> <td>CsvHelper_TrimUnescape</td> <td>Cols</td> <td>50000</td> <td align="right">129.55 ms</td> <td align="right">9.58</td> <td align="right">41</td> <td align="right">322.4</td> <td align="right">2591.0</td> <td align="right">451.52 KB</td> <td align="right">369.89</td> </tr> <tr> <td>CsvHelper_TrimUnescapeTrim</td> <td>Cols</td> <td>50000</td> <td align="right">127.82 ms</td> <td align="right">9.45</td> <td align="right">41</td> <td align="right">326.8</td> <td align="right">2556.4</td> <td align="right">445.86 KB</td> <td align="right">365.25</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h6 tabindex="-1" class="heading-element" dir="auto">AMD.Ryzen.9.5950X - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h6><a id="user-content-amdryzen95950x---packageassets-with-spaces-and-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: AMD.Ryzen.9.5950X - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#amdryzen95950x---packageassets-with-spaces-and-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep_</td> <td>Cols</td> <td>50000</td> <td align="right">9.467 ms</td> <td align="right">1.00</td> <td align="right">41</td> <td align="right">4412.2</td> <td align="right">189.3</td> <td align="right">1.05 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_Trim</td> <td>Cols</td> <td>50000</td> <td align="right">12.972 ms</td> <td align="right">1.37</td> <td align="right">41</td> <td align="right">3219.9</td> <td align="right">259.4</td> <td align="right">1.06 KB</td> <td align="right">1.01</td> </tr> <tr> <td>Sep_TrimUnescape</td> <td>Cols</td> <td>50000</td> <td align="right">13.630 ms</td> <td align="right">1.44</td> <td align="right">41</td> <td align="right">3064.5</td> <td align="right">272.6</td> <td align="right">1.06 KB</td> <td align="right">1.02</td> </tr> <tr> <td>Sep_TrimUnescapeTrim</td> <td>Cols</td> <td>50000</td> <td align="right">15.502 ms</td> <td align="right">1.64</td> <td align="right">41</td> <td align="right">2694.4</td> <td align="right">310.0</td> <td align="right">1.07 KB</td> <td align="right">1.03</td> </tr> <tr> <td>CsvHelper_TrimUnescape</td> <td>Cols</td> <td>50000</td> <td align="right">98.444 ms</td> <td align="right">10.40</td> <td align="right">41</td> <td align="right">424.3</td> <td align="right">1968.9</td> <td align="right">451.52 KB</td> <td align="right">431.70</td> </tr> <tr> <td>CsvHelper_TrimUnescapeTrim</td> <td>Cols</td> <td>50000</td> <td align="right">97.110 ms</td> <td align="right">10.26</td> <td align="right">41</td> <td align="right">430.1</td> <td align="right">1942.2</td> <td align="right">445.86 KB</td> <td align="right">426.29</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h6 tabindex="-1" class="heading-element" dir="auto">Apple.M1.(Virtual) - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h6><a id="user-content-applem1virtual---packageassets-with-spaces-and-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: Apple.M1.(Virtual) - PackageAssets with Spaces and Quotes Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#applem1virtual---packageassets-with-spaces-and-quotes-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep_</td> <td>Cols</td> <td>50000</td> <td align="right">13.51 ms</td> <td align="right">1.00</td> <td align="right">41</td> <td align="right">3085.8</td> <td align="right">270.1</td> <td align="right">1.1 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_Trim</td> <td>Cols</td> <td>50000</td> <td align="right">16.78 ms</td> <td align="right">1.24</td> <td align="right">41</td> <td align="right">2484.2</td> <td align="right">335.5</td> <td align="right">1.03 KB</td> <td align="right">0.94</td> </tr> <tr> <td>Sep_TrimUnescape</td> <td>Cols</td> <td>50000</td> <td align="right">17.90 ms</td> <td align="right">1.33</td> <td align="right">41</td> <td align="right">2327.7</td> <td align="right">358.1</td> <td align="right">1.37 KB</td> <td align="right">1.25</td> </tr> <tr> <td>Sep_TrimUnescapeTrim</td> <td>Cols</td> <td>50000</td> <td align="right">21.65 ms</td> <td align="right">1.60</td> <td align="right">41</td> <td align="right">1924.5</td> <td align="right">433.1</td> <td align="right">1.37 KB</td> <td align="right">1.25</td> </tr> <tr> <td>CsvHelper_TrimUnescape</td> <td>Cols</td> <td>50000</td> <td align="right">95.06 ms</td> <td align="right">7.04</td> <td align="right">41</td> <td align="right">438.4</td> <td align="right">1901.1</td> <td align="right">451.6 KB</td> <td align="right">410.32</td> </tr> <tr> <td>CsvHelper_TrimUnescapeTrim</td> <td>Cols</td> <td>50000</td> <td align="right">93.41 ms</td> <td align="right">6.92</td> <td align="right">41</td> <td align="right">446.1</td> <td align="right">1868.2</td> <td align="right">445.93 KB</td> <td align="right">405.18</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Floats Reader Comparison Benchmarks</h4><a id="user-content-floats-reader-comparison-benchmarks" class="anchor" aria-label="Permalink: Floats Reader Comparison Benchmarks" href="#floats-reader-comparison-benchmarks"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">The <a href="/nietras/Sep/blob/main/src/Sep.ComparisonBenchmarks/FloatsReaderBench.cs">FloatsReaderBench.cs</a> benchmark demonstrates what Sep is built for. Namely parsing 32-bit floating points or features as in machine learning. Here a simple CSV-file is randomly generated with <code>N</code> ground truth values, <code>N</code> predicted result values and nothing else (note this was changed from version 0.3.0, prior to that there were some extra leading columns). <code>N = 20</code> here. For example:</p> <div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="GT_Feature0;GT_Feature1;GT_Feature2;GT_Feature3;GT_Feature4;GT_Feature5;GT_Feature6;GT_Feature7;GT_Feature8;GT_Feature9;GT_Feature10;GT_Feature11;GT_Feature12;GT_Feature13;GT_Feature14;GT_Feature15;GT_Feature16;GT_Feature17;GT_Feature18;GT_Feature19;RE_Feature0;RE_Feature1;RE_Feature2;RE_Feature3;RE_Feature4;RE_Feature5;RE_Feature6;RE_Feature7;RE_Feature8;RE_Feature9;RE_Feature10;RE_Feature11;RE_Feature12;RE_Feature13;RE_Feature14;RE_Feature15;RE_Feature16;RE_Feature17;RE_Feature18;RE_Feature19 0.52276427;0.16843422;0.26259267;0.7244084;0.51292276;0.17365117;0.76125056;0.23458846;0.2573214;0.50560355;0.3202332;0.3809696;0.26024464;0.5174511;0.035318818;0.8141374;0.57719684;0.3974705;0.15219308;0.09011261;0.70515215;0.81618196;0.5399706;0.044147138;0.7111546;0.14776127;0.90621275;0.6925897;0.5164137;0.18637845;0.041509967;0.30819967;0.5831603;0.8210651;0.003954861;0.535722;0.8051845;0.7483589;0.3845737;0.14911908 0.6264564;0.11517637;0.24996082;0.77242833;0.2896067;0.6481459;0.14364648;0.044498358;0.6045593;0.51591337;0.050794687;0.42036617;0.7065823;0.6284636;0.21844554;0.013253775;0.36516154;0.2674384;0.06866083;0.71817476;0.07094294;0.46409357;0.012033525;0.7978093;0.43917948;0.5134962;0.4995968;0.008952909;0.82883793;0.012896823;0.0030740085;0.063773096;0.6541431;0.034539033;0.9135142;0.92897075;0.46119377;0.37533295;0.61660606;0.044443816 0.7922863;0.5323656;0.400699;0.29737252;0.9072584;0.58673894;0.73510516;0.019412167;0.88168067;0.9576787;0.33283427;0.7107;0.1623628;0.10314285;0.4521515;0.33324885;0.7761104;0.14854911;0.13469358;0.21566042;0.59166247;0.5128394;0.98702157;0.766223;0.67204326;0.7149494;0.2894748;0.55206;0.9898286;0.65083236;0.02421702;0.34540752;0.92906284;0.027142895;0.21974725;0.26544374;0.03848049;0.2161237;0.59233844;0.42221397 0.10609442;0.32130885;0.32383907;0.7511514;0.8258279;0.00904226;0.0420841;0.84049565;0.8958947;0.23807365;0.92621964;0.8452882;0.2794469;0.545344;0.63447595;0.62532926;0.19230893;0.29726416;0.18304513;0.029583583;0.23084833;0.93346167;0.98742676;0.78163713;0.13521992;0.8833956;0.18670778;0.29476836;0.5599867;0.5562107;0.7124796;0.121927656;0.5981778;0.39144602;0.88092715;0.4449142;0.34820423;0.96379805;0.46364686;0.54301775"><pre lang="text" class="notranslate"><code>GT_Feature0;GT_Feature1;GT_Feature2;GT_Feature3;GT_Feature4;GT_Feature5;GT_Feature6;GT_Feature7;GT_Feature8;GT_Feature9;GT_Feature10;GT_Feature11;GT_Feature12;GT_Feature13;GT_Feature14;GT_Feature15;GT_Feature16;GT_Feature17;GT_Feature18;GT_Feature19;RE_Feature0;RE_Feature1;RE_Feature2;RE_Feature3;RE_Feature4;RE_Feature5;RE_Feature6;RE_Feature7;RE_Feature8;RE_Feature9;RE_Feature10;RE_Feature11;RE_Feature12;RE_Feature13;RE_Feature14;RE_Feature15;RE_Feature16;RE_Feature17;RE_Feature18;RE_Feature19 0.52276427;0.16843422;0.26259267;0.7244084;0.51292276;0.17365117;0.76125056;0.23458846;0.2573214;0.50560355;0.3202332;0.3809696;0.26024464;0.5174511;0.035318818;0.8141374;0.57719684;0.3974705;0.15219308;0.09011261;0.70515215;0.81618196;0.5399706;0.044147138;0.7111546;0.14776127;0.90621275;0.6925897;0.5164137;0.18637845;0.041509967;0.30819967;0.5831603;0.8210651;0.003954861;0.535722;0.8051845;0.7483589;0.3845737;0.14911908 0.6264564;0.11517637;0.24996082;0.77242833;0.2896067;0.6481459;0.14364648;0.044498358;0.6045593;0.51591337;0.050794687;0.42036617;0.7065823;0.6284636;0.21844554;0.013253775;0.36516154;0.2674384;0.06866083;0.71817476;0.07094294;0.46409357;0.012033525;0.7978093;0.43917948;0.5134962;0.4995968;0.008952909;0.82883793;0.012896823;0.0030740085;0.063773096;0.6541431;0.034539033;0.9135142;0.92897075;0.46119377;0.37533295;0.61660606;0.044443816 0.7922863;0.5323656;0.400699;0.29737252;0.9072584;0.58673894;0.73510516;0.019412167;0.88168067;0.9576787;0.33283427;0.7107;0.1623628;0.10314285;0.4521515;0.33324885;0.7761104;0.14854911;0.13469358;0.21566042;0.59166247;0.5128394;0.98702157;0.766223;0.67204326;0.7149494;0.2894748;0.55206;0.9898286;0.65083236;0.02421702;0.34540752;0.92906284;0.027142895;0.21974725;0.26544374;0.03848049;0.2161237;0.59233844;0.42221397 0.10609442;0.32130885;0.32383907;0.7511514;0.8258279;0.00904226;0.0420841;0.84049565;0.8958947;0.23807365;0.92621964;0.8452882;0.2794469;0.545344;0.63447595;0.62532926;0.19230893;0.29726416;0.18304513;0.029583583;0.23084833;0.93346167;0.98742676;0.78163713;0.13521992;0.8833956;0.18670778;0.29476836;0.5599867;0.5562107;0.7124796;0.121927656;0.5981778;0.39144602;0.88092715;0.4449142;0.34820423;0.96379805;0.46364686;0.54301775 </code></pre></div> <p dir="auto">For <code>Scope=Floats</code> the benchmark will parse the features as two spans of <code>float</code>s; one for ground truth values and one for predicted result values. Then calculates the mean squared error (MSE) of those as an example. For Sep this code is succinct and still incredibly efficient:</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="using var reader = Sep.Reader().From(Reader.CreateReader()); var groundTruthColNames = reader.Header.NamesStartingWith(&quot;GT_&quot;); var resultColNames = groundTruthColNames.Select(n =&gt; n.Replace(&quot;GT_&quot;, &quot;RE_&quot;, StringComparison.Ordinal)) .ToArray(); var sum = 0.0; var count = 0; foreach (var row in reader) { var gts = row[groundTruthColNames].Parse&lt;float&gt;(); var res = row[resultColNames].Parse&lt;float&gt;(); sum += MeanSquaredError(gts, res); ++count; } return sum / count;"><pre><span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">From</span><span class="pl-kos">(</span><span class="pl-s1">Reader</span><span class="pl-kos">.</span><span class="pl-en">CreateReader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">groundTruthColNames</span> <span class="pl-c1">=</span> <span class="pl-s1">reader</span><span class="pl-kos">.</span><span class="pl-s1">Header</span><span class="pl-kos">.</span><span class="pl-en">NamesStartingWith</span><span class="pl-kos">(</span><span class="pl-s">"GT_"</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">resultColNames</span> <span class="pl-c1">=</span> <span class="pl-s1">groundTruthColNames</span><span class="pl-kos">.</span><span class="pl-en">Select</span><span class="pl-kos">(</span>n <span class="pl-c1">=&gt;</span> <span class="pl-s1">n</span><span class="pl-kos">.</span><span class="pl-en">Replace</span><span class="pl-kos">(</span><span class="pl-s">"GT_"</span><span class="pl-kos">,</span> <span class="pl-s">"RE_"</span><span class="pl-kos">,</span> <span class="pl-s1">StringComparison</span><span class="pl-kos">.</span><span class="pl-s1">Ordinal</span><span class="pl-kos">)</span><span class="pl-kos">)</span> <span class="pl-kos">.</span><span class="pl-en">ToArray</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">sum</span> <span class="pl-c1">=</span> <span class="pl-c1">0.0</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">count</span> <span class="pl-c1">=</span> <span class="pl-c1">0</span><span class="pl-kos">;</span> <span class="pl-k">foreach</span> <span class="pl-kos">(</span><span class="pl-k">var</span> <span class="pl-s1">row</span> <span class="pl-k">in</span> <span class="pl-s1">reader</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">var</span> <span class="pl-s1">gts</span> <span class="pl-c1">=</span> <span class="pl-s1">row</span><span class="pl-kos">[</span><span class="pl-s1">groundTruthColNames</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-smi">Parse</span><span class="pl-c1">&lt;</span><span class="pl-smi">float</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">res</span> <span class="pl-c1">=</span> <span class="pl-s1">row</span><span class="pl-kos">[</span><span class="pl-s1">resultColNames</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-smi">Parse</span><span class="pl-c1">&lt;</span><span class="pl-smi">float</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">sum</span> <span class="pl-c1">+=</span> <span class="pl-s1">MeanSquaredError</span><span class="pl-kos">(</span><span class="pl-s1">gts</span><span class="pl-kos">,</span> <span class="pl-s1">res</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c1">++</span><span class="pl-s1">count</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">return</span> <span class="pl-s1">sum</span> <span class="pl-c1">/</span> <span class="pl-s1">count</span><span class="pl-kos">;</span></pre></div> <p dir="auto">Note how one can access and parse multiple columns easily while there are no repeated allocations for the parsed floating points. Sep internally handles a pool of arrays for handling multiple columns and returns spans for them.</p> <p dir="auto">The benchmark is based on an assumption of accessing columns by name per row. Ideally, one would look up the indices of the columns by name before enumerating rows, but this is a repeated nuisance to have to handle and Sep was built to avoid this. Hence, the comparison is based on looking up by name for each, even if this ends up adding a bit more code in the benchmark for other approaches.</p> <p dir="auto">As can be seen below, the actual low level parsing of the separated values is a tiny part of the total runtime for Sep for which the runtime is dominated by parsing the floating points. Since Sep uses <a href="https://github.com/CarlVerret/csFastFloat">csFastFloat</a> for an integrated fast floating point parser, it is <strong>&gt;2x faster than Sylvan</strong> for example. If using Sylvan one may consider using csFastFloat if that is an option. With the multi-threaded (MT) <code>ParallelEnumerate</code> implementation Sep is <strong>up to 23x faster than Sylvan</strong>.</p> <p dir="auto">CsvHelper suffers from the fact that one can only access the column as a string so this has to be allocated for each column (ReadLine by definition always allocates a string per column). Still CsvHelper is significantly slower than the naive <code>ReadLine</code> approach. With Sep being <strong>&gt;4x faster than CsvHelper</strong> and <strong>up to 35x times faster when using <code>ParallelEnumerate</code></strong>.</p> <p dir="auto">Note that <code>ParallelEnumerate</code> provides significant speedup over single-threaded parsing even though the source is only about 20 MB. This underlines how efficient <code>ParallelEnumerate</code> is, but bear in mind that this is for the case of repeated micro-benchmark runs.</p> <p dir="auto">It is a testament to how good the .NET and the .NET GC is that the ReadLine is pretty good compared to CsvHelper regardless of allocating a lot of strings.</p> <div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">AMD.EPYC.7763 - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h5><a id="user-content-amdepyc7763---floatsreader-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: AMD.EPYC.7763 - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#amdepyc7763---floatsreader-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep______</td> <td>Row</td> <td>25000</td> <td align="right">2.913 ms</td> <td align="right">1.00</td> <td align="right">20</td> <td align="right">6958.5</td> <td align="right">116.5</td> <td align="right">1.26 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Row</td> <td>25000</td> <td align="right">3.566 ms</td> <td align="right">1.22</td> <td align="right">20</td> <td align="right">5685.3</td> <td align="right">142.6</td> <td align="right">10.71 KB</td> <td align="right">8.51</td> </tr> <tr> <td>ReadLine_</td> <td>Row</td> <td>25000</td> <td align="right">18.192 ms</td> <td align="right">6.24</td> <td align="right">20</td> <td align="right">1114.3</td> <td align="right">727.7</td> <td align="right">73489.7 KB</td> <td align="right">58,426.60</td> </tr> <tr> <td>CsvHelper</td> <td>Row</td> <td>25000</td> <td align="right">38.233 ms</td> <td align="right">13.12</td> <td align="right">20</td> <td align="right">530.2</td> <td align="right">1529.3</td> <td align="right">20.06 KB</td> <td align="right">15.95</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Cols</td> <td>25000</td> <td align="right">3.950 ms</td> <td align="right">1.00</td> <td align="right">20</td> <td align="right">5131.9</td> <td align="right">158.0</td> <td align="right">1.26 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Cols</td> <td>25000</td> <td align="right">5.911 ms</td> <td align="right">1.50</td> <td align="right">20</td> <td align="right">3429.6</td> <td align="right">236.4</td> <td align="right">10.72 KB</td> <td align="right">8.48</td> </tr> <tr> <td>ReadLine_</td> <td>Cols</td> <td>25000</td> <td align="right">19.574 ms</td> <td align="right">4.96</td> <td align="right">20</td> <td align="right">1035.6</td> <td align="right">783.0</td> <td align="right">73489.68 KB</td> <td align="right">58,155.66</td> </tr> <tr> <td>CsvHelper</td> <td>Cols</td> <td>25000</td> <td align="right">41.031 ms</td> <td align="right">10.39</td> <td align="right">20</td> <td align="right">494.1</td> <td align="right">1641.3</td> <td align="right">21340.29 KB</td> <td align="right">16,887.53</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Floats</td> <td>25000</td> <td align="right">31.469 ms</td> <td align="right">1.00</td> <td align="right">20</td> <td align="right">644.2</td> <td align="right">1258.7</td> <td align="right">8.08 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Floats</td> <td>25000</td> <td align="right">12.639 ms</td> <td align="right">0.40</td> <td align="right">20</td> <td align="right">1604.0</td> <td align="right">505.5</td> <td align="right">67.81 KB</td> <td align="right">8.40</td> </tr> <tr> <td>Sylvan___</td> <td>Floats</td> <td>25000</td> <td align="right">84.199 ms</td> <td align="right">2.68</td> <td align="right">20</td> <td align="right">240.8</td> <td align="right">3368.0</td> <td align="right">19.89 KB</td> <td align="right">2.46</td> </tr> <tr> <td>ReadLine_</td> <td>Floats</td> <td>25000</td> <td align="right">112.934 ms</td> <td align="right">3.59</td> <td align="right">20</td> <td align="right">179.5</td> <td align="right">4517.4</td> <td align="right">73493.2 KB</td> <td align="right">9,101.10</td> </tr> <tr> <td>CsvHelper</td> <td>Floats</td> <td>25000</td> <td align="right">161.035 ms</td> <td align="right">5.12</td> <td align="right">20</td> <td align="right">125.9</td> <td align="right">6441.4</td> <td align="right">22062.53 KB</td> <td align="right">2,732.14</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h5><a id="user-content-amdryzen7pro7840uwradeon780m---floatsreader-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: AMD.Ryzen.7.PRO.7840U.w.Radeon.780M - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#amdryzen7pro7840uwradeon780m---floatsreader-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep______</td> <td>Row</td> <td>25000</td> <td align="right">3.415 ms</td> <td align="right">1.00</td> <td align="right">20</td> <td align="right">5949.8</td> <td align="right">136.6</td> <td align="right">1.41 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Row</td> <td>25000</td> <td align="right">3.803 ms</td> <td align="right">1.11</td> <td align="right">20</td> <td align="right">5343.6</td> <td align="right">152.1</td> <td align="right">10.71 KB</td> <td align="right">7.59</td> </tr> <tr> <td>ReadLine_</td> <td>Row</td> <td>25000</td> <td align="right">15.853 ms</td> <td align="right">4.64</td> <td align="right">20</td> <td align="right">1281.8</td> <td align="right">634.1</td> <td align="right">73489.64 KB</td> <td align="right">52,078.47</td> </tr> <tr> <td>CsvHelper</td> <td>Row</td> <td>25000</td> <td align="right">39.778 ms</td> <td align="right">11.65</td> <td align="right">20</td> <td align="right">510.8</td> <td align="right">1591.1</td> <td align="right">20.03 KB</td> <td align="right">14.19</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Cols</td> <td>25000</td> <td align="right">4.470 ms</td> <td align="right">1.00</td> <td align="right">20</td> <td align="right">4546.3</td> <td align="right">178.8</td> <td align="right">1.42 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Cols</td> <td>25000</td> <td align="right">5.999 ms</td> <td align="right">1.34</td> <td align="right">20</td> <td align="right">3387.4</td> <td align="right">239.9</td> <td align="right">10.71 KB</td> <td align="right">7.54</td> </tr> <tr> <td>ReadLine_</td> <td>Cols</td> <td>25000</td> <td align="right">17.779 ms</td> <td align="right">3.98</td> <td align="right">20</td> <td align="right">1142.9</td> <td align="right">711.2</td> <td align="right">73489.66 KB</td> <td align="right">51,756.13</td> </tr> <tr> <td>CsvHelper</td> <td>Cols</td> <td>25000</td> <td align="right">43.374 ms</td> <td align="right">9.70</td> <td align="right">20</td> <td align="right">468.5</td> <td align="right">1735.0</td> <td align="right">21340.41 KB</td> <td align="right">15,029.29</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Floats</td> <td>25000</td> <td align="right">32.146 ms</td> <td align="right">1.00</td> <td align="right">20</td> <td align="right">632.1</td> <td align="right">1285.8</td> <td align="right">8.2 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Floats</td> <td>25000</td> <td align="right">6.082 ms</td> <td align="right">0.19</td> <td align="right">20</td> <td align="right">3340.7</td> <td align="right">243.3</td> <td align="right">115.72 KB</td> <td align="right">14.11</td> </tr> <tr> <td>Sylvan___</td> <td>Floats</td> <td>25000</td> <td align="right">81.398 ms</td> <td align="right">2.53</td> <td align="right">20</td> <td align="right">249.6</td> <td align="right">3255.9</td> <td align="right">18.88 KB</td> <td align="right">2.30</td> </tr> <tr> <td>ReadLine_</td> <td>Floats</td> <td>25000</td> <td align="right">107.332 ms</td> <td align="right">3.34</td> <td align="right">20</td> <td align="right">189.3</td> <td align="right">4293.3</td> <td align="right">73493.12 KB</td> <td align="right">8,960.23</td> </tr> <tr> <td>CsvHelper</td> <td>Floats</td> <td>25000</td> <td align="right">157.689 ms</td> <td align="right">4.91</td> <td align="right">20</td> <td align="right">128.9</td> <td align="right">6307.6</td> <td align="right">22062.72 KB</td> <td align="right">2,689.87</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">AMD.Ryzen.9.5950X - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h5><a id="user-content-amdryzen95950x---floatsreader-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: AMD.Ryzen.9.5950X - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#amdryzen95950x---floatsreader-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep______</td> <td>Row</td> <td>25000</td> <td align="right">2.013 ms</td> <td align="right">1.00</td> <td align="right">20</td> <td align="right">10093.4</td> <td align="right">80.5</td> <td align="right">1.25 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Row</td> <td>25000</td> <td align="right">2.355 ms</td> <td align="right">1.17</td> <td align="right">20</td> <td align="right">8627.4</td> <td align="right">94.2</td> <td align="right">10.7 KB</td> <td align="right">8.56</td> </tr> <tr> <td>ReadLine_</td> <td>Row</td> <td>25000</td> <td align="right">9.787 ms</td> <td align="right">4.86</td> <td align="right">20</td> <td align="right">2076.1</td> <td align="right">391.5</td> <td align="right">73489.63 KB</td> <td align="right">58,791.71</td> </tr> <tr> <td>CsvHelper</td> <td>Row</td> <td>25000</td> <td align="right">25.143 ms</td> <td align="right">12.49</td> <td align="right">20</td> <td align="right">808.2</td> <td align="right">1005.7</td> <td align="right">20 KB</td> <td align="right">16.00</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Cols</td> <td>25000</td> <td align="right">2.666 ms</td> <td align="right">1.00</td> <td align="right">20</td> <td align="right">7622.2</td> <td align="right">106.6</td> <td align="right">1.25 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Cols</td> <td>25000</td> <td align="right">3.702 ms</td> <td align="right">1.39</td> <td align="right">20</td> <td align="right">5488.4</td> <td align="right">148.1</td> <td align="right">10.71 KB</td> <td align="right">8.54</td> </tr> <tr> <td>ReadLine_</td> <td>Cols</td> <td>25000</td> <td align="right">10.544 ms</td> <td align="right">3.96</td> <td align="right">20</td> <td align="right">1927.1</td> <td align="right">421.8</td> <td align="right">73489.63 KB</td> <td align="right">58,654.23</td> </tr> <tr> <td>CsvHelper</td> <td>Cols</td> <td>25000</td> <td align="right">27.442 ms</td> <td align="right">10.29</td> <td align="right">20</td> <td align="right">740.5</td> <td align="right">1097.7</td> <td align="right">21340.34 KB</td> <td align="right">17,032.36</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Floats</td> <td>25000</td> <td align="right">20.297 ms</td> <td align="right">1.00</td> <td align="right">20</td> <td align="right">1001.1</td> <td align="right">811.9</td> <td align="right">7.97 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Floats</td> <td>25000</td> <td align="right">3.780 ms</td> <td align="right">0.19</td> <td align="right">20</td> <td align="right">5375.6</td> <td align="right">151.2</td> <td align="right">179.49 KB</td> <td align="right">22.51</td> </tr> <tr> <td>Sylvan___</td> <td>Floats</td> <td>25000</td> <td align="right">52.343 ms</td> <td align="right">2.58</td> <td align="right">20</td> <td align="right">388.2</td> <td align="right">2093.7</td> <td align="right">18.88 KB</td> <td align="right">2.37</td> </tr> <tr> <td>ReadLine_</td> <td>Floats</td> <td>25000</td> <td align="right">68.698 ms</td> <td align="right">3.38</td> <td align="right">20</td> <td align="right">295.8</td> <td align="right">2747.9</td> <td align="right">73493.12 KB</td> <td align="right">9,215.89</td> </tr> <tr> <td>CsvHelper</td> <td>Floats</td> <td>25000</td> <td align="right">100.913 ms</td> <td align="right">4.97</td> <td align="right">20</td> <td align="right">201.4</td> <td align="right">4036.5</td> <td align="right">22061.69 KB</td> <td align="right">2,766.49</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">Apple.M1.(Virtual) - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)</h5><a id="user-content-applem1virtual---floatsreader-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124" class="anchor" aria-label="Permalink: Apple.M1.(Virtual) - FloatsReader Benchmark Results (Sep 0.9.0.0, Sylvan 1.3.9.0, CsvHelper 33.0.1.24)" href="#applem1virtual---floatsreader-benchmark-results-sep-0900-sylvan--1390-csvhelper-330124"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th>Method</th> <th>Scope</th> <th>Rows</th> <th align="right">Mean</th> <th align="right">Ratio</th> <th align="right">MB</th> <th align="right">MB/s</th> <th align="right">ns/row</th> <th align="right">Allocated</th> <th align="right">Alloc Ratio</th> </tr> </thead> <tbody> <tr> <td>Sep______</td> <td>Row</td> <td>25000</td> <td align="right">4.209 ms</td> <td align="right">1.00</td> <td align="right">20</td> <td align="right">4815.8</td> <td align="right">168.4</td> <td align="right">1.2 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Row</td> <td>25000</td> <td align="right">19.401 ms</td> <td align="right">4.61</td> <td align="right">20</td> <td align="right">1044.9</td> <td align="right">776.0</td> <td align="right">10.62 KB</td> <td align="right">8.87</td> </tr> <tr> <td>ReadLine_</td> <td>Row</td> <td>25000</td> <td align="right">15.132 ms</td> <td align="right">3.60</td> <td align="right">20</td> <td align="right">1339.7</td> <td align="right">605.3</td> <td align="right">73489.65 KB</td> <td align="right">61,381.24</td> </tr> <tr> <td>CsvHelper</td> <td>Row</td> <td>25000</td> <td align="right">30.200 ms</td> <td align="right">7.18</td> <td align="right">20</td> <td align="right">671.3</td> <td align="right">1208.0</td> <td align="right">20.21 KB</td> <td align="right">16.88</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Cols</td> <td>25000</td> <td align="right">5.070 ms</td> <td align="right">1.00</td> <td align="right">20</td> <td align="right">3998.5</td> <td align="right">202.8</td> <td align="right">1.21 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sylvan___</td> <td>Cols</td> <td>25000</td> <td align="right">23.742 ms</td> <td align="right">4.68</td> <td align="right">20</td> <td align="right">853.9</td> <td align="right">949.7</td> <td align="right">10.62 KB</td> <td align="right">8.74</td> </tr> <tr> <td>ReadLine_</td> <td>Cols</td> <td>25000</td> <td align="right">17.569 ms</td> <td align="right">3.47</td> <td align="right">20</td> <td align="right">1153.9</td> <td align="right">702.7</td> <td align="right">73489.65 KB</td> <td align="right">60,493.09</td> </tr> <tr> <td>CsvHelper</td> <td>Cols</td> <td>25000</td> <td align="right">34.182 ms</td> <td align="right">6.74</td> <td align="right">20</td> <td align="right">593.1</td> <td align="right">1367.3</td> <td align="right">21340.43 KB</td> <td align="right">17,566.40</td> </tr> <tr> <td></td> <td></td> <td></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> <td align="right"></td> </tr> <tr> <td>Sep______</td> <td>Floats</td> <td>25000</td> <td align="right">27.363 ms</td> <td align="right">1.00</td> <td align="right">20</td> <td align="right">740.8</td> <td align="right">1094.5</td> <td align="right">8.08 KB</td> <td align="right">1.00</td> </tr> <tr> <td>Sep_MT___</td> <td>Floats</td> <td>25000</td> <td align="right">12.814 ms</td> <td align="right">0.47</td> <td align="right">20</td> <td align="right">1582.0</td> <td align="right">512.6</td> <td align="right">67.85 KB</td> <td align="right">8.40</td> </tr> <tr> <td>Sylvan___</td> <td>Floats</td> <td>25000</td> <td align="right">78.840 ms</td> <td align="right">2.88</td> <td align="right">20</td> <td align="right">257.1</td> <td align="right">3153.6</td> <td align="right">18.57 KB</td> <td align="right">2.30</td> </tr> <tr> <td>ReadLine_</td> <td>Floats</td> <td>25000</td> <td align="right">89.458 ms</td> <td align="right">3.27</td> <td align="right">20</td> <td align="right">226.6</td> <td align="right">3578.3</td> <td align="right">73493.2 KB</td> <td align="right">9,093.41</td> </tr> <tr> <td>CsvHelper</td> <td>Floats</td> <td>25000</td> <td align="right">130.793 ms</td> <td align="right">4.78</td> <td align="right">20</td> <td align="right">155.0</td> <td align="right">5231.7</td> <td align="right">22061.99 KB</td> <td align="right">2,729.76</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Writer Comparison Benchmarks</h3><a id="user-content-writer-comparison-benchmarks" class="anchor" aria-label="Permalink: Writer Comparison Benchmarks" href="#writer-comparison-benchmarks"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Writer benchmarks are still pending, but Sep is unlikely to be the fastest here since it is explicitly designed to make writing more convenient and flexible. Still efficient, but not necessarily fastest. That is, Sep does not require writing header up front and hence having to keep header column order and row values column order the same. This means Sep does not write columns <em>directly</em> upon definition but defers this until a new row has been fully defined and then is ended.</p> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Example Catalogue</h2><a id="user-content-example-catalogue" class="anchor" aria-label="Permalink: Example Catalogue" href="#example-catalogue"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">The following examples are available in <a href="/nietras/Sep/blob/main/src/Sep.XyzTest/ReadMeTest.cs">ReadMeTest.cs</a>.</p> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Example - Copy Rows</h3><a id="user-content-example---copy-rows" class="anchor" aria-label="Permalink: Example - Copy Rows" href="#example---copy-rows"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="var text = &quot;&quot;&quot; A;B;C;D;E;F Sep;🚀;1;1.2;0.1;0.5 CSV;✅;2;2.2;0.2;1.5 &quot;&quot;&quot;; // Empty line at end is for line ending using var reader = Sep.Reader().FromText(text); using var writer = reader.Spec.Writer().ToText(); foreach (var readRow in reader) { using var writeRow = writer.NewRow(readRow); } Assert.AreEqual(text, writer.ToString());"><pre><span class="pl-k">var</span> <span class="pl-s1">text</span> <span class="pl-c1">=</span> <span class="pl-s">"""</span> <span class="pl-s"> A;B;C;D;E;F</span> <span class="pl-s"> Sep;🚀;1;1.2;0.1;0.5</span> <span class="pl-s"> CSV;✅;2;2.2;0.2;1.5</span> <span class="pl-s"> </span> <span class="pl-s"> """</span><span class="pl-kos">;</span> <span class="pl-c">// Empty line at end is for line ending</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromText</span><span class="pl-kos">(</span><span class="pl-s1">text</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">writer</span> <span class="pl-c1">=</span> <span class="pl-s1">reader</span><span class="pl-kos">.</span><span class="pl-s1">Spec</span><span class="pl-kos">.</span><span class="pl-en">Writer</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">ToText</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">foreach</span> <span class="pl-kos">(</span><span class="pl-k">var</span> <span class="pl-s1">readRow</span> <span class="pl-k">in</span> <span class="pl-s1">reader</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">writeRow</span> <span class="pl-c1">=</span> <span class="pl-s1">writer</span><span class="pl-kos">.</span><span class="pl-en">NewRow</span><span class="pl-kos">(</span><span class="pl-s1">readRow</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">AreEqual</span><span class="pl-kos">(</span><span class="pl-s1">text</span><span class="pl-kos">,</span> <span class="pl-s1">writer</span><span class="pl-kos">.</span><span class="pl-en">ToString</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Example - Copy Rows (Async)</h3><a id="user-content-example---copy-rows-async" class="anchor" aria-label="Permalink: Example - Copy Rows (Async)" href="#example---copy-rows-async"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="var text = &quot;&quot;&quot; A;B;C;D;E;F Sep;🚀;1;1.2;0.1;0.5 CSV;✅;2;2.2;0.2;1.5 &quot;&quot;&quot;; // Empty line at end is for line ending using var reader = await Sep.Reader().FromTextAsync(text); await using var writer = reader.Spec.Writer().ToText(); await foreach (var readRow in reader) { await using var writeRow = writer.NewRow(readRow); } Assert.AreEqual(text, writer.ToString());"><pre><span class="pl-k">var</span> <span class="pl-s1">text</span> <span class="pl-c1">=</span> <span class="pl-s">"""</span> <span class="pl-s"> A;B;C;D;E;F</span> <span class="pl-s"> Sep;🚀;1;1.2;0.1;0.5</span> <span class="pl-s"> CSV;✅;2;2.2;0.2;1.5</span> <span class="pl-s"> </span> <span class="pl-s"> """</span><span class="pl-kos">;</span> <span class="pl-c">// Empty line at end is for line ending</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-k">await</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromTextAsync</span><span class="pl-kos">(</span><span class="pl-s1">text</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">await</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">writer</span> <span class="pl-c1">=</span> <span class="pl-s1">reader</span><span class="pl-kos">.</span><span class="pl-s1">Spec</span><span class="pl-kos">.</span><span class="pl-en">Writer</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">ToText</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">await</span> <span class="pl-k">foreach</span> <span class="pl-kos">(</span><span class="pl-k">var</span> <span class="pl-s1">readRow</span> <span class="pl-k">in</span> <span class="pl-s1">reader</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">await</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">writeRow</span> <span class="pl-c1">=</span> <span class="pl-s1">writer</span><span class="pl-kos">.</span><span class="pl-en">NewRow</span><span class="pl-kos">(</span><span class="pl-s1">readRow</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">AreEqual</span><span class="pl-kos">(</span><span class="pl-s1">text</span><span class="pl-kos">,</span> <span class="pl-s1">writer</span><span class="pl-kos">.</span><span class="pl-en">ToString</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Example - Skip Empty Rows</h3><a id="user-content-example---skip-empty-rows" class="anchor" aria-label="Permalink: Example - Skip Empty Rows" href="#example---skip-empty-rows"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="var text = &quot;&quot;&quot; A 1 2 3 4 &quot;&quot;&quot;; // Empty line at end is for line ending var expected = new[] { 1, 2, 3, 4 }; // Disable col count check to allow empty rows using var reader = Sep.Reader(o =&gt; o with { DisableColCountCheck = true }).FromText(text); var actual = new List&lt;int&gt;(); foreach (var row in reader) { // Skip empty row if (row.Span.Length == 0) { continue; } actual.Add(row[&quot;A&quot;].Parse&lt;int&gt;()); } CollectionAssert.AreEqual(expected, actual);"><pre><span class="pl-k">var</span> <span class="pl-s1">text</span> <span class="pl-c1">=</span> <span class="pl-s">"""</span> <span class="pl-s"> A</span> <span class="pl-s"> 1</span> <span class="pl-s"> 2</span> <span class="pl-s"></span> <span class="pl-s"> 3</span> <span class="pl-s"></span> <span class="pl-s"></span> <span class="pl-s"> 4</span> <span class="pl-s"> </span> <span class="pl-s"> """</span><span class="pl-kos">;</span> <span class="pl-c">// Empty line at end is for line ending</span> <span class="pl-k">var</span> <span class="pl-s1">expected</span> <span class="pl-c1">=</span> <span class="pl-k">new</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-c1">1</span><span class="pl-kos">,</span> <span class="pl-c1">2</span><span class="pl-kos">,</span> <span class="pl-c1">3</span><span class="pl-kos">,</span> <span class="pl-c1">4</span> <span class="pl-kos">}</span><span class="pl-kos">;</span> <span class="pl-c">// Disable col count check to allow empty rows</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span>o <span class="pl-c1">=&gt;</span> <span class="pl-s1">o</span> <span class="pl-k">with</span> <span class="pl-kos">{</span> <span class="pl-s1">DisableColCountCheck</span> <span class="pl-c1">=</span> <span class="pl-c1">true</span> <span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromText</span><span class="pl-kos">(</span><span class="pl-s1">text</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">actual</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-smi">List</span><span class="pl-c1">&lt;</span><span class="pl-smi">int</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">foreach</span> <span class="pl-kos">(</span><span class="pl-k">var</span> <span class="pl-s1">row</span> <span class="pl-k">in</span> <span class="pl-s1">reader</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-c">// Skip empty row</span> <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">row</span><span class="pl-kos">.</span><span class="pl-s1">Span</span><span class="pl-kos">.</span><span class="pl-s1">Length</span> <span class="pl-c1">==</span> <span class="pl-c1">0</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">continue</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-s1">actual</span><span class="pl-kos">.</span><span class="pl-en">Add</span><span class="pl-kos">(</span><span class="pl-s1">row</span><span class="pl-kos">[</span><span class="pl-s">"A"</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-smi">Parse</span><span class="pl-c1">&lt;</span><span class="pl-smi">int</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-s1">CollectionAssert</span><span class="pl-kos">.</span><span class="pl-en">AreEqual</span><span class="pl-kos">(</span><span class="pl-s1">expected</span><span class="pl-kos">,</span> <span class="pl-s1">actual</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Example - Use Extension Method Enumerate within async/await Context (prior to C# 13.0)</h3><a id="user-content-example---use-extension-method-enumerate-within-asyncawait-context-prior-to-c-130" class="anchor" aria-label="Permalink: Example - Use Extension Method Enumerate within async/await Context (prior to C# 13.0)" href="#example---use-extension-method-enumerate-within-asyncawait-context-prior-to-c-130"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Since <code>SepReader.Row</code> is a <code>ref struct</code> as covered above, one has to avoid referencing it directly in async context for C# prior to 13.0. This can be done in a number of ways, but one way is to use <code>Enumerate</code> extension method to parse/extract data from row like shown below.</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="var text = &quot;&quot;&quot; C 1 2 &quot;&quot;&quot;; using var reader = Sep.Reader().FromText(text); var squaredSum = 0; // Use Enumerate to avoid referencing SepReader.Row in async context foreach (var value in reader.Enumerate(row =&gt; row[&quot;C&quot;].Parse&lt;int&gt;())) { squaredSum += await Task.Run(() =&gt; value * value); } Assert.AreEqual(5, squaredSum);"><pre><span class="pl-k">var</span> <span class="pl-s1">text</span> <span class="pl-c1">=</span> <span class="pl-s">"""</span> <span class="pl-s"> C</span> <span class="pl-s"> 1</span> <span class="pl-s"> 2</span> <span class="pl-s"> """</span><span class="pl-kos">;</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromText</span><span class="pl-kos">(</span><span class="pl-s1">text</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">squaredSum</span> <span class="pl-c1">=</span> <span class="pl-c1">0</span><span class="pl-kos">;</span> <span class="pl-c">// Use Enumerate to avoid referencing SepReader.Row in async context</span> <span class="pl-k">foreach</span> <span class="pl-kos">(</span><span class="pl-k">var</span> <span class="pl-s1">value</span> <span class="pl-k">in</span> <span class="pl-s1">reader</span><span class="pl-kos">.</span><span class="pl-en">Enumerate</span><span class="pl-kos">(</span>row <span class="pl-c1">=&gt;</span> <span class="pl-s1">row</span><span class="pl-kos">[</span><span class="pl-s">"C"</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-smi">Parse</span><span class="pl-c1">&lt;</span><span class="pl-smi">int</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-s1">squaredSum</span> <span class="pl-c1">+=</span> <span class="pl-k">await</span> <span class="pl-s1">Task</span><span class="pl-kos">.</span><span class="pl-en">Run</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-s1">value</span> <span class="pl-c1">*</span> <span class="pl-s1">value</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">AreEqual</span><span class="pl-kos">(</span><span class="pl-c1">5</span><span class="pl-kos">,</span> <span class="pl-s1">squaredSum</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Example - Use Local Function within async/await Context</h3><a id="user-content-example---use-local-function-within-asyncawait-context" class="anchor" aria-label="Permalink: Example - Use Local Function within async/await Context" href="#example---use-local-function-within-asyncawait-context"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Another way to avoid referencing <code>SepReader.Row</code> directly in async context is to use custom iterator via <code>yield return</code> to parse/extract data from row like shown below.</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="var text = &quot;&quot;&quot; C 1 2 &quot;&quot;&quot;; using var reader = Sep.Reader().FromText(text); var squaredSum = 0; // Use custom local function Enumerate to avoid referencing // SepReader.Row in async context foreach (var value in Enumerate(reader)) { squaredSum += await Task.Run(() =&gt; value * value); } Assert.AreEqual(5, squaredSum); static IEnumerable&lt;int&gt; Enumerate(SepReader reader) { foreach (var r in reader) { yield return r[&quot;C&quot;].Parse&lt;int&gt;(); } }"><pre><span class="pl-k">var</span> <span class="pl-s1">text</span> <span class="pl-c1">=</span> <span class="pl-s">"""</span> <span class="pl-s"> C</span> <span class="pl-s"> 1</span> <span class="pl-s"> 2</span> <span class="pl-s"> """</span><span class="pl-kos">;</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FromText</span><span class="pl-kos">(</span><span class="pl-s1">text</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">squaredSum</span> <span class="pl-c1">=</span> <span class="pl-c1">0</span><span class="pl-kos">;</span> <span class="pl-c">// Use custom local function Enumerate to avoid referencing</span> <span class="pl-c">// SepReader.Row in async context</span> <span class="pl-k">foreach</span> <span class="pl-kos">(</span><span class="pl-k">var</span> <span class="pl-s1">value</span> <span class="pl-k">in</span> <span class="pl-s1">Enumerate</span><span class="pl-kos">(</span><span class="pl-s1">reader</span><span class="pl-kos">)</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-s1">squaredSum</span> <span class="pl-c1">+=</span> <span class="pl-k">await</span> <span class="pl-s1">Task</span><span class="pl-kos">.</span><span class="pl-en">Run</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-s1">value</span> <span class="pl-c1">*</span> <span class="pl-s1">value</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-s1">Assert</span><span class="pl-kos">.</span><span class="pl-en">AreEqual</span><span class="pl-kos">(</span><span class="pl-c1">5</span><span class="pl-kos">,</span> <span class="pl-s1">squaredSum</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-smi">IEnumerable</span><span class="pl-c1">&lt;</span><span class="pl-smi">int</span><span class="pl-c1">&gt;</span> <span class="pl-en">Enumerate</span><span class="pl-kos">(</span><span class="pl-smi">SepReader</span> <span class="pl-s1">reader</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">foreach</span> <span class="pl-kos">(</span><span class="pl-k">var</span> <span class="pl-s1">r</span> <span class="pl-k">in</span> <span class="pl-s1">reader</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">yield</span> <span class="pl-k">return</span> <span class="pl-s1">r</span><span class="pl-kos">[</span><span class="pl-s">"C"</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-smi">Parse</span><span class="pl-c1">&lt;</span><span class="pl-smi">int</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span></pre></div> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Example - Skip Lines/Rows Starting with Comment <code>#</code></h3><a id="user-content-example---skip-linesrows-starting-with-comment-" class="anchor" aria-label="Permalink: Example - Skip Lines/Rows Starting with Comment #" href="#example---skip-linesrows-starting-with-comment-"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Below shows how one can skip lines starting with comment <code>#</code> since Sep does not have built-in support for this. Note that this presumes lines to be skipped before header do not contain quotes or rather line endings within quotes as that is not handled by the <code>Peek()</code> skipping. The rows starting with comment <code>#</code> after header are skipped if handling quoting is enabled in Sep options.</p> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="var text = &quot;&quot;&quot; # Comment 1 # Comment 2 A # Comment 3 1 2 # Comment 4 &quot;&quot;&quot;; const char Comment = '#'; using var textReader = new StringReader(text); // Skip initial lines (not rows) before header while (textReader.Peek() == Comment &amp;&amp; textReader.ReadLine() is string line) { } using var reader = Sep.Reader().From(textReader); var values = new List&lt;int&gt;(); foreach (var row in reader) { // Skip rows starting with comment if (row.Span.StartsWith([Comment])) { continue; } var value = row[&quot;A&quot;].Parse&lt;int&gt;(); values.Add(value); } CollectionAssert.AreEqual(new int[] { 1, 2 }, values);"><pre><span class="pl-k">var</span> <span class="pl-s1">text</span> <span class="pl-c1">=</span> <span class="pl-s">"""</span> <span class="pl-s"> # Comment 1</span> <span class="pl-s"> # Comment 2</span> <span class="pl-s"> A</span> <span class="pl-s"> # Comment 3</span> <span class="pl-s"> 1</span> <span class="pl-s"> 2</span> <span class="pl-s"> # Comment 4</span> <span class="pl-s"> """</span><span class="pl-kos">;</span> <span class="pl-k">const</span> <span class="pl-smi">char</span> <span class="pl-s1">Comment</span> <span class="pl-c1">=</span> <span class="pl-s">'#'</span><span class="pl-kos">;</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">textReader</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-smi">StringReader</span><span class="pl-kos">(</span><span class="pl-s1">text</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// Skip initial lines (not rows) before header</span> <span class="pl-k">while</span> <span class="pl-kos">(</span><span class="pl-s1">textReader</span><span class="pl-kos">.</span><span class="pl-en">Peek</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-c1">==</span> <span class="pl-s1">Comment</span> <span class="pl-c1">&amp;&amp;</span> <span class="pl-s1">textReader</span><span class="pl-kos">.</span><span class="pl-en">ReadLine</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-k">is</span> <span class="pl-smi">string</span> <span class="pl-s1">line</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">using</span> <span class="pl-k">var</span> <span class="pl-s1">reader</span> <span class="pl-c1">=</span> <span class="pl-s1">Sep</span><span class="pl-kos">.</span><span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">From</span><span class="pl-kos">(</span><span class="pl-s1">textReader</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">var</span> <span class="pl-s1">values</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-smi">List</span><span class="pl-c1">&lt;</span><span class="pl-smi">int</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">foreach</span> <span class="pl-kos">(</span><span class="pl-k">var</span> <span class="pl-s1">row</span> <span class="pl-k">in</span> <span class="pl-s1">reader</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-c">// Skip rows starting with comment</span> <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">row</span><span class="pl-kos">.</span><span class="pl-s1">Span</span><span class="pl-kos">.</span><span class="pl-en">StartsWith</span><span class="pl-kos">(</span><span class="pl-kos">[</span><span class="pl-s1">Comment</span><span class="pl-kos">]</span><span class="pl-kos">)</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">continue</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">var</span> <span class="pl-s1">value</span> <span class="pl-c1">=</span> <span class="pl-s1">row</span><span class="pl-kos">[</span><span class="pl-s">"A"</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-smi">Parse</span><span class="pl-c1">&lt;</span><span class="pl-smi">int</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">values</span><span class="pl-kos">.</span><span class="pl-en">Add</span><span class="pl-kos">(</span><span class="pl-s1">value</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-s1">CollectionAssert</span><span class="pl-kos">.</span><span class="pl-en">AreEqual</span><span class="pl-kos">(</span><span class="pl-k">new</span> <span class="pl-smi">int</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-c1">1</span><span class="pl-kos">,</span> <span class="pl-c1">2</span> <span class="pl-kos">}</span><span class="pl-kos">,</span> <span class="pl-s1">values</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">RFC-4180</h2><a id="user-content-rfc-4180" class="anchor" aria-label="Permalink: RFC-4180" href="#rfc-4180"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">While the <a href="https://www.ietf.org/rfc/rfc4180.txt" rel="nofollow">RFC-4180</a> requires <code>\r\n</code> (CR,LF) as line ending, the well-known line endings (<code>\r\n</code>, <code>\n</code> and <code>\r</code>) are supported similar to .NET. <code>Environment.NewLine</code> is used when writing. Quoting is supported by simply matching pairs of quotes, no matter what.</p> <p dir="auto">Note that some libraries will claim conformance but the RFC is, perhaps naturally, quite strict e.g. only comma is supported as separator/delimiter. Sep defaults to using <code>;</code> as separator if writing, while auto-detecting supported separators when reading. This is decidedly non-conforming.</p> <p dir="auto">The RFC defines the following condensed <a href="https://en.wikipedia.org/wiki/Augmented_Backus%E2%80%93Naur_form" rel="nofollow">ABNF grammar</a>:</p> <div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="file = [header CRLF] record *(CRLF record) [CRLF] header = name *(COMMA name) record = field *(COMMA field) name = field field = (escaped / non-escaped) escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE non-escaped = *TEXTDATA COMMA = %x2C CR = %x0D ;as per section 6.1 of RFC 2234 [2] DQUOTE = %x22 ;as per section 6.1 of RFC 2234 [2] LF = %x0A ;as per section 6.1 of RFC 2234 [2] CRLF = CR LF ;as per section 6.1 of RFC 2234 [2] TEXTDATA = %x20-21 / %x23-2B / %x2D-7E"><pre lang="text" class="notranslate"><code>file = [header CRLF] record *(CRLF record) [CRLF] header = name *(COMMA name) record = field *(COMMA field) name = field field = (escaped / non-escaped) escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE non-escaped = *TEXTDATA COMMA = %x2C CR = %x0D ;as per section 6.1 of RFC 2234 [2] DQUOTE = %x22 ;as per section 6.1 of RFC 2234 [2] LF = %x0A ;as per section 6.1 of RFC 2234 [2] CRLF = CR LF ;as per section 6.1 of RFC 2234 [2] TEXTDATA = %x20-21 / %x23-2B / %x2D-7E </code></pre></div> <p dir="auto">Note how <code>TEXTDATA</code> is restricted too, yet many will allow any character incl. emojis or similar (which Sep supports), but is not in conformance with the RFC.</p> <p dir="auto">Quotes inside an escaped field e.g. <code>"fie""ld"</code> are only allowed to be double quotes. Sep currently allows any pairs of quotes and quoting doesn't need to be at start of or end of field (col or column in Sep terminology).</p> <p dir="auto">All in all Sep takes a pretty pragmatic approach here as the primary use case is <strong>not</strong> exchanging data on the internet, but for use in machine learning pipelines or similar.</p> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Frequently Asked Questions (FAQ)</h2><a id="user-content-frequently-asked-questions-faq" class="anchor" aria-label="Permalink: Frequently Asked Questions (FAQ)" href="#frequently-asked-questions-faq"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Ask questions on GitHub and this section will be expanded. :)</p> <ul dir="auto"> <li><em>Does Sep support <a href="https://joshclose.github.io/CsvHelper/examples/reading/get-class-records/" rel="nofollow">object mapping like CsvHelper</a>?</em> No, Sep is a minimal library and does not support object mapping. First, this is usually supported via reflection, which Sep avoids. Second, object mapping often only works well in a few cases without actually writing custom mapping for each property, which then basically amounts to writing the parsing code yourself. If object mapping is a must have, consider writing your own <a href="https://devblogs.microsoft.com/dotnet/new-c-source-generator-samples/" rel="nofollow">source generator</a> for it if you want to use Sep. Maybe some day Sep will have a built-in source generator, but not in the foreseeable future.</li> </ul> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">SepReader FAQ</h3><a id="user-content-sepreader-faq" class="anchor" aria-label="Permalink: SepReader FAQ" href="#sepreader-faq"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">SepWriter FAQ</h3><a id="user-content-sepwriter-faq" class="anchor" aria-label="Permalink: SepWriter FAQ" href="#sepwriter-faq"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Links</h2><a id="user-content-links" class="anchor" aria-label="Permalink: Links" href="#links"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li><a href="https://www.meziantou.net/publishing-a-nuget-package-following-best-practices-using-github.htm" rel="nofollow">Publishing a NuGet package using GitHub and GitHub Actions</a></li> </ul> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Public API Reference</h2><a id="user-content-public-api-reference" class="anchor" aria-label="Permalink: Public API Reference" href="#public-api-reference"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="[assembly: System.CLSCompliant(false)] [assembly: System.Reflection.AssemblyMetadata(&quot;IsTrimmable&quot;, &quot;True&quot;)] [assembly: System.Reflection.AssemblyMetadata(&quot;RepositoryUrl&quot;, &quot;https://github.com/nietras/Sep/&quot;)] [assembly: System.Resources.NeutralResourcesLanguage(&quot;en&quot;)] [assembly: System.Runtime.CompilerServices.InternalsVisibleTo(&quot;Sep.Benchmarks&quot;)] [assembly: System.Runtime.CompilerServices.InternalsVisibleTo(&quot;Sep.ComparisonBenchmarks&quot;)] [assembly: System.Runtime.CompilerServices.InternalsVisibleTo(&quot;Sep.Test&quot;)] [assembly: System.Runtime.CompilerServices.InternalsVisibleTo(&quot;Sep.XyzTest&quot;)] [assembly: System.Runtime.Versioning.TargetFramework(&quot;.NETCoreApp,Version=v9.0&quot;, FrameworkDisplayName=&quot;.NET 9.0&quot;)] namespace nietras.SeparatedValues { public readonly struct Sep : System.IEquatable&lt;nietras.SeparatedValues.Sep&gt; { public Sep() { } public Sep(char separator) { } public char Separator { get; init; } public static nietras.SeparatedValues.Sep? Auto { get; } public static nietras.SeparatedValues.Sep Default { get; } public static nietras.SeparatedValues.Sep New(char separator) { } public static nietras.SeparatedValues.SepReaderOptions Reader() { } public static nietras.SeparatedValues.SepReaderOptions Reader(System.Func&lt;nietras.SeparatedValues.SepReaderOptions, nietras.SeparatedValues.SepReaderOptions&gt; configure) { } public static nietras.SeparatedValues.SepWriterOptions Writer() { } public static nietras.SeparatedValues.SepWriterOptions Writer(System.Func&lt;nietras.SeparatedValues.SepWriterOptions, nietras.SeparatedValues.SepWriterOptions&gt; configure) { } } public enum SepColNotSetOption : byte { Throw = 0, Empty = 1, Skip = 2, } public delegate nietras.SeparatedValues.SepToString SepCreateToString(nietras.SeparatedValues.SepReaderHeader? maybeHeader, int colCount); public static class SepDefaults { public static System.StringComparer ColNameComparer { get; } public static System.Globalization.CultureInfo CultureInfo { get; } public static char Separator { get; } } [System.Diagnostics.DebuggerDisplay(&quot;{DebuggerDisplay,nq}&quot;)] public sealed class SepReader : nietras.SeparatedValues.SepReaderState, System.Collections.Generic.IAsyncEnumerable&lt;nietras.SeparatedValues.SepReader.Row&gt;, System.Collections.Generic.IEnumerable&lt;nietras.SeparatedValues.SepReader.Row&gt;, System.Collections.Generic.IEnumerator&lt;nietras.SeparatedValues.SepReader.Row&gt;, System.Collections.IEnumerable, System.Collections.IEnumerator, System.IDisposable { public nietras.SeparatedValues.SepReader.Row Current { get; } public bool HasHeader { get; } public bool HasRows { get; } public nietras.SeparatedValues.SepReaderHeader Header { get; } public bool IsEmpty { get; } public nietras.SeparatedValues.SepSpec Spec { get; } public nietras.SeparatedValues.SepReader.AsyncEnumerator GetAsyncEnumerator(System.Threading.CancellationToken cancellationToken = default) { } public nietras.SeparatedValues.SepReader GetEnumerator() { } public bool MoveNext() { } public System.Threading.Tasks.ValueTask&lt;bool&gt; MoveNextAsync(System.Threading.CancellationToken cancellationToken = default) { } public string ToString(int index) { } public readonly struct AsyncEnumerator : System.Collections.Generic.IAsyncEnumerator&lt;nietras.SeparatedValues.SepReader.Row&gt;, System.IAsyncDisposable { public nietras.SeparatedValues.SepReader.Row Current { get; } public System.Threading.Tasks.ValueTask DisposeAsync() { } public System.Threading.Tasks.ValueTask&lt;bool&gt; MoveNextAsync() { } } [System.Diagnostics.DebuggerDisplay(&quot;{DebuggerDisplay}&quot;)] public readonly ref struct Col { public System.ReadOnlySpan&lt;char&gt; Span { get; } public T Parse&lt;T&gt;() where T : System.ISpanParsable&lt;T&gt; { } public override string ToString() { } public T? TryParse&lt;T&gt;() where T : struct, System.ISpanParsable&lt;T&gt; { } public bool TryParse&lt;T&gt;(out T value) where T : System.ISpanParsable&lt;T&gt; { } } public readonly ref struct Cols { public int Count { get; } public nietras.SeparatedValues.SepReader.Col this[int index] { get; } public string CombinePathsToString() { } public System.ReadOnlySpan&lt;char&gt; Join(System.ReadOnlySpan&lt;char&gt; separator) { } public string JoinPathsToString() { } public string JoinToString(System.ReadOnlySpan&lt;char&gt; separator) { } public System.Span&lt;T&gt; Parse&lt;T&gt;() where T : System.ISpanParsable&lt;T&gt; { } public void Parse&lt;T&gt;(System.Span&lt;T&gt; span) where T : System.ISpanParsable&lt;T&gt; { } public T[] ParseToArray&lt;T&gt;() where T : System.ISpanParsable&lt;T&gt; { } public System.Span&lt;T&gt; Select&lt;T&gt;(method selector) { } public System.Span&lt;T&gt; Select&lt;T&gt;(nietras.SeparatedValues.SepReader.ColFunc&lt;T&gt; selector) { } public System.Span&lt;string&gt; ToStrings() { } public string[] ToStringsArray() { } public System.Span&lt;T?&gt; TryParse&lt;T&gt;() where T : struct, System.ISpanParsable&lt;T&gt; { } public void TryParse&lt;T&gt;(System.Span&lt;T?&gt; span) where T : struct, System.ISpanParsable&lt;T&gt; { } } [System.Diagnostics.DebuggerDisplay(&quot;{DebuggerDisplayPrefix,nq}{Span}&quot;)] [System.Diagnostics.DebuggerTypeProxy(typeof(nietras.SeparatedValues.SepReader.Row.DebugView))] public readonly ref struct Row { public int ColCount { get; } public nietras.SeparatedValues.SepReader.Col this[int index] { get; } public nietras.SeparatedValues.SepReader.Col this[System.Index index] { get; } public nietras.SeparatedValues.SepReader.Col this[string colName] { get; } public nietras.SeparatedValues.SepReader.Cols this[System.Range range] { get; } public nietras.SeparatedValues.SepReader.Cols this[System.ReadOnlySpan&lt;int&gt; indices] { get; } public nietras.SeparatedValues.SepReader.Cols this[System.Collections.Generic.IReadOnlyList&lt;int&gt; indices] { get; } public nietras.SeparatedValues.SepReader.Cols this[int[] indices] { get; } public nietras.SeparatedValues.SepReader.Cols this[System.ReadOnlySpan&lt;string&gt; colNames] { get; } public nietras.SeparatedValues.SepReader.Cols this[System.Collections.Generic.IReadOnlyList&lt;string&gt; colNames] { get; } public nietras.SeparatedValues.SepReader.Cols this[string[] colNames] { get; } public int LineNumberFrom { get; } public int LineNumberToExcl { get; } public int RowIndex { get; } public System.ReadOnlySpan&lt;char&gt; Span { get; } public System.Func&lt;int, string&gt; UnsafeToStringDelegate { get; } public override string ToString() { } } public delegate void ColAction(nietras.SeparatedValues.SepReader.Col col); public delegate T ColFunc&lt;T&gt;(nietras.SeparatedValues.SepReader.Col col); public delegate void ColsAction(nietras.SeparatedValues.SepReader.Cols col); public delegate void RowAction(nietras.SeparatedValues.SepReader.Row row); public delegate T RowFunc&lt;T&gt;(nietras.SeparatedValues.SepReader.Row row); public delegate bool RowTryFunc&lt;T&gt;(nietras.SeparatedValues.SepReader.Row row, out T value); } public static class SepReaderExtensions { public static System.Collections.Generic.IEnumerable&lt;T&gt; Enumerate&lt;T&gt;(this nietras.SeparatedValues.SepReader reader, nietras.SeparatedValues.SepReader.RowFunc&lt;T&gt; select) { } public static System.Collections.Generic.IEnumerable&lt;T&gt; Enumerate&lt;T&gt;(this nietras.SeparatedValues.SepReader reader, nietras.SeparatedValues.SepReader.RowTryFunc&lt;T&gt; trySelect) { } public static System.Collections.Generic.IAsyncEnumerable&lt;T&gt; EnumerateAsync&lt;T&gt;(this nietras.SeparatedValues.SepReader reader, nietras.SeparatedValues.SepReader.RowFunc&lt;T&gt; select) { } public static System.Collections.Generic.IAsyncEnumerable&lt;T&gt; EnumerateAsync&lt;T&gt;(this nietras.SeparatedValues.SepReader reader, nietras.SeparatedValues.SepReader.RowTryFunc&lt;T&gt; trySelect) { } public static nietras.SeparatedValues.SepReader From(in this nietras.SeparatedValues.SepReaderOptions options, byte[] buffer) { } public static nietras.SeparatedValues.SepReader From(in this nietras.SeparatedValues.SepReaderOptions options, System.IO.Stream stream) { } public static nietras.SeparatedValues.SepReader From(in this nietras.SeparatedValues.SepReaderOptions options, System.IO.TextReader reader) { } public static nietras.SeparatedValues.SepReader From(in this nietras.SeparatedValues.SepReaderOptions options, string name, System.Func&lt;string, System.IO.Stream&gt; nameToStream) { } public static nietras.SeparatedValues.SepReader From(in this nietras.SeparatedValues.SepReaderOptions options, string name, System.Func&lt;string, System.IO.TextReader&gt; nameToReader) { } public static System.Threading.Tasks.ValueTask&lt;nietras.SeparatedValues.SepReader&gt; FromAsync(this nietras.SeparatedValues.SepReaderOptions options, byte[] buffer, System.Threading.CancellationToken cancellationToken = default) { } public static System.Threading.Tasks.ValueTask&lt;nietras.SeparatedValues.SepReader&gt; FromAsync(this nietras.SeparatedValues.SepReaderOptions options, System.IO.Stream stream, System.Threading.CancellationToken cancellationToken = default) { } public static System.Threading.Tasks.ValueTask&lt;nietras.SeparatedValues.SepReader&gt; FromAsync(this nietras.SeparatedValues.SepReaderOptions options, System.IO.TextReader reader, System.Threading.CancellationToken cancellationToken = default) { } public static System.Threading.Tasks.ValueTask&lt;nietras.SeparatedValues.SepReader&gt; FromAsync(this nietras.SeparatedValues.SepReaderOptions options, string name, System.Func&lt;string, System.IO.Stream&gt; nameToStream, System.Threading.CancellationToken cancellationToken = default) { } public static System.Threading.Tasks.ValueTask&lt;nietras.SeparatedValues.SepReader&gt; FromAsync(this nietras.SeparatedValues.SepReaderOptions options, string name, System.Func&lt;string, System.IO.TextReader&gt; nameToReader, System.Threading.CancellationToken cancellationToken = default) { } public static nietras.SeparatedValues.SepReader FromFile(in this nietras.SeparatedValues.SepReaderOptions options, string filePath) { } public static System.Threading.Tasks.ValueTask&lt;nietras.SeparatedValues.SepReader&gt; FromFileAsync(this nietras.SeparatedValues.SepReaderOptions options, string filePath, System.Threading.CancellationToken cancellationToken = default) { } public static nietras.SeparatedValues.SepReader FromText(in this nietras.SeparatedValues.SepReaderOptions options, string text) { } public static System.Threading.Tasks.ValueTask&lt;nietras.SeparatedValues.SepReader&gt; FromTextAsync(this nietras.SeparatedValues.SepReaderOptions options, string text, System.Threading.CancellationToken cancellationToken = default) { } public static System.Collections.Generic.IEnumerable&lt;T&gt; ParallelEnumerate&lt;T&gt;(this nietras.SeparatedValues.SepReader reader, nietras.SeparatedValues.SepReader.RowFunc&lt;T&gt; select) { } public static System.Collections.Generic.IEnumerable&lt;T&gt; ParallelEnumerate&lt;T&gt;(this nietras.SeparatedValues.SepReader reader, nietras.SeparatedValues.SepReader.RowTryFunc&lt;T&gt; trySelect) { } public static System.Collections.Generic.IEnumerable&lt;T&gt; ParallelEnumerate&lt;T&gt;(this nietras.SeparatedValues.SepReader reader, nietras.SeparatedValues.SepReader.RowFunc&lt;T&gt; select, int degreeOfParallism) { } public static System.Collections.Generic.IEnumerable&lt;T&gt; ParallelEnumerate&lt;T&gt;(this nietras.SeparatedValues.SepReader reader, nietras.SeparatedValues.SepReader.RowTryFunc&lt;T&gt; trySelect, int degreeOfParallism) { } public static nietras.SeparatedValues.SepReaderOptions Reader(this nietras.SeparatedValues.Sep sep) { } public static nietras.SeparatedValues.SepReaderOptions Reader(this nietras.SeparatedValues.Sep? sep) { } public static nietras.SeparatedValues.SepReaderOptions Reader(this nietras.SeparatedValues.SepSpec spec) { } public static nietras.SeparatedValues.SepReaderOptions Reader(this nietras.SeparatedValues.Sep sep, System.Func&lt;nietras.SeparatedValues.SepReaderOptions, nietras.SeparatedValues.SepReaderOptions&gt; configure) { } public static nietras.SeparatedValues.SepReaderOptions Reader(this nietras.SeparatedValues.Sep? sep, System.Func&lt;nietras.SeparatedValues.SepReaderOptions, nietras.SeparatedValues.SepReaderOptions&gt; configure) { } public static nietras.SeparatedValues.SepReaderOptions Reader(this nietras.SeparatedValues.SepSpec spec, System.Func&lt;nietras.SeparatedValues.SepReaderOptions, nietras.SeparatedValues.SepReaderOptions&gt; configure) { } } public sealed class SepReaderHeader { public System.Collections.Generic.IReadOnlyList&lt;string&gt; ColNames { get; } public bool IsEmpty { get; } public static nietras.SeparatedValues.SepReaderHeader Empty { get; } public int IndexOf(System.ReadOnlySpan&lt;char&gt; colName) { } public int IndexOf(string colName) { } public int[] IndicesOf(System.Collections.Generic.IReadOnlyList&lt;string&gt; colNames) { } public int[] IndicesOf([System.Runtime.CompilerServices.ParamCollection] [System.Runtime.CompilerServices.ScopedRef] System.ReadOnlySpan&lt;string&gt; colNames) { } public int[] IndicesOf(params string[] colNames) { } public void IndicesOf(System.ReadOnlySpan&lt;string&gt; colNames, System.Span&lt;int&gt; colIndices) { } public System.Collections.Generic.IReadOnlyList&lt;string&gt; NamesStartingWith(string prefix, System.StringComparison comparison = 4) { } public override string ToString() { } public bool TryIndexOf(System.ReadOnlySpan&lt;char&gt; colName, out int colIndex) { } public bool TryIndexOf(string colName, out int colIndex) { } } public readonly struct SepReaderOptions : System.IEquatable&lt;nietras.SeparatedValues.SepReaderOptions&gt; { public SepReaderOptions() { } public SepReaderOptions(nietras.SeparatedValues.Sep? sep) { } public bool AsyncContinueOnCapturedContext { get; init; } public System.Collections.Generic.IEqualityComparer&lt;string&gt; ColNameComparer { get; init; } public nietras.SeparatedValues.SepCreateToString CreateToString { get; init; } public System.Globalization.CultureInfo? CultureInfo { get; init; } public bool DisableColCountCheck { get; init; } public bool DisableFastFloat { get; init; } public bool DisableQuotesParsing { get; init; } public bool HasHeader { get; init; } public int InitialBufferLength { get; init; } public nietras.SeparatedValues.Sep? Sep { get; init; } public nietras.SeparatedValues.SepTrim Trim { get; init; } public bool Unescape { get; init; } } public class SepReaderState : System.IDisposable { public void Dispose() { } } public static class SepReaderWriterExtensions { public static void CopyTo(this nietras.SeparatedValues.SepReader.Row readerRow, nietras.SeparatedValues.SepWriter.Row writerRow) { } public static nietras.SeparatedValues.SepWriter.Row NewRow(this nietras.SeparatedValues.SepWriter writer, nietras.SeparatedValues.SepReader.Row rowToCopy) { } public static nietras.SeparatedValues.SepWriter.Row NewRow(this nietras.SeparatedValues.SepWriter writer, nietras.SeparatedValues.SepReader.Row rowToCopy, System.Threading.CancellationToken cancellationToken) { } } public readonly struct SepSpec : System.IEquatable&lt;nietras.SeparatedValues.SepSpec&gt; { public SepSpec() { } public SepSpec(nietras.SeparatedValues.Sep sep, System.Globalization.CultureInfo? cultureInfo) { } public SepSpec(nietras.SeparatedValues.Sep sep, System.Globalization.CultureInfo? cultureInfo, bool asyncContinueOnCapturedContext) { } public bool AsyncContinueOnCapturedContext { get; init; } public System.Globalization.CultureInfo? CultureInfo { get; init; } public nietras.SeparatedValues.Sep Sep { get; init; } } public abstract class SepToString : System.IDisposable { protected SepToString() { } public virtual bool IsThreadSafe { get; } public static nietras.SeparatedValues.SepCreateToString Direct { get; } public void Dispose() { } protected virtual void Dispose(bool disposing) { } public abstract string ToString(System.ReadOnlySpan&lt;char&gt; colSpan, int colIndex); public static nietras.SeparatedValues.SepCreateToString OnePool(int maximumStringLength = 32, int initialCapacity = 64, int maximumCapacity = 4096) { } public static nietras.SeparatedValues.SepCreateToString PoolPerCol(int maximumStringLength = 32, int initialCapacity = 64, int maximumCapacity = 4096) { } public static nietras.SeparatedValues.SepCreateToString PoolPerColThreadSafe(int maximumStringLength = 32, int initialCapacity = 64, int maximumCapacity = 4096) { } public static nietras.SeparatedValues.SepCreateToString PoolPerColThreadSafeFixedCapacity(int maximumStringLength = 32, int capacity = 2048) { } } [System.Flags] public enum SepTrim : byte { None = 0, Outer = 1, AfterUnescape = 2, All = 3, } [System.Diagnostics.DebuggerDisplay(&quot;{DebuggerDisplay,nq}&quot;)] public sealed class SepWriter : System.IAsyncDisposable, System.IDisposable { public nietras.SeparatedValues.SepWriterHeader Header { get; } public nietras.SeparatedValues.SepSpec Spec { get; } public void Dispose() { } public System.Threading.Tasks.ValueTask DisposeAsync() { } public void Flush() { } public System.Threading.Tasks.Task FlushAsync(System.Threading.CancellationToken cancellationToken = default) { } public nietras.SeparatedValues.SepWriter.Row NewRow() { } public nietras.SeparatedValues.SepWriter.Row NewRow(System.Threading.CancellationToken cancellationToken) { } public override string ToString() { } public readonly ref struct Col { public void Format&lt;T&gt;(T value) where T : System.ISpanFormattable { } public void Set(System.ReadOnlySpan&lt;char&gt; span) { } public void Set([System.Runtime.CompilerServices.InterpolatedStringHandlerArgument(&quot;&quot;)] ref nietras.SeparatedValues.SepWriter.Col.FormatInterpolatedStringHandler handler) { } public void Set(System.IFormatProvider? provider, [System.Runtime.CompilerServices.InterpolatedStringHandlerArgument(new string?[]?[] { &quot;&quot;, &quot;provider&quot;})] ref nietras.SeparatedValues.SepWriter.Col.FormatInterpolatedStringHandler handler) { } [System.Runtime.CompilerServices.InterpolatedStringHandler] public ref struct FormatInterpolatedStringHandler { public FormatInterpolatedStringHandler(int literalLength, int formattedCount, nietras.SeparatedValues.SepWriter.Col col) { } public FormatInterpolatedStringHandler(int literalLength, int formattedCount, nietras.SeparatedValues.SepWriter.Col col, System.IFormatProvider? provider) { } public void AppendFormatted(System.ReadOnlySpan&lt;char&gt; value) { } public void AppendFormatted(string? value) { } public void AppendFormatted(System.ReadOnlySpan&lt;char&gt; value, int alignment = 0, string? format = null) { } public void AppendFormatted(object? value, int alignment = 0, string? format = null) { } public void AppendFormatted(string? value, int alignment = 0, string? format = null) { } public void AppendFormatted&lt;T&gt;(T value) { } public void AppendFormatted&lt;T&gt;(T value, int alignment) { } public void AppendFormatted&lt;T&gt;(T value, string? format) { } public void AppendFormatted&lt;T&gt;(T value, int alignment, string? format) { } public void AppendLiteral(string value) { } } } public readonly ref struct Cols { public int Count { get; } public nietras.SeparatedValues.SepWriter.Col this[int colIndex] { get; } public void Format&lt;T&gt;(System.Collections.Generic.IReadOnlyList&lt;T&gt; values) where T : System.ISpanFormattable { } public void Format&lt;T&gt;([System.Runtime.CompilerServices.ParamCollection] [System.Runtime.CompilerServices.ScopedRef] System.ReadOnlySpan&lt;T&gt; values) where T : System.ISpanFormattable { } public void Format&lt;T&gt;(System.Span&lt;T&gt; values) where T : System.ISpanFormattable { } public void Format&lt;T&gt;(T[] values) where T : System.ISpanFormattable { } public void Format&lt;T&gt;(System.ReadOnlySpan&lt;T&gt; values, nietras.SeparatedValues.SepWriter.ColAction&lt;T&gt; format) { } public void Set(System.Collections.Generic.IReadOnlyList&lt;string&gt; values) { } public void Set([System.Runtime.CompilerServices.ParamCollection] [System.Runtime.CompilerServices.ScopedRef] System.ReadOnlySpan&lt;string&gt; values) { } public void Set(string[] values) { } public void Set(nietras.SeparatedValues.SepReader.Cols cols) { } } public ref struct Row : System.IAsyncDisposable, System.IDisposable { public nietras.SeparatedValues.SepWriter.Col this[int colIndex] { get; } public nietras.SeparatedValues.SepWriter.Col this[string colName] { get; } public nietras.SeparatedValues.SepWriter.Cols this[System.ReadOnlySpan&lt;int&gt; indices] { get; } public nietras.SeparatedValues.SepWriter.Cols this[System.ReadOnlySpan&lt;string&gt; colNames] { get; } public nietras.SeparatedValues.SepWriter.Cols this[System.Collections.Generic.IReadOnlyList&lt;string&gt; colNames] { get; } public nietras.SeparatedValues.SepWriter.Cols this[string[] colNames] { get; } public void Dispose() { } public System.Threading.Tasks.ValueTask DisposeAsync() { } } public delegate void ColAction(nietras.SeparatedValues.SepWriter.Col col); public delegate void ColAction&lt;T&gt;(nietras.SeparatedValues.SepWriter.Col col, T value); public delegate void RowAction(nietras.SeparatedValues.SepWriter.Row row); } public static class SepWriterExtensions { public static nietras.SeparatedValues.SepWriter To(in this nietras.SeparatedValues.SepWriterOptions options, System.IO.Stream stream) { } public static nietras.SeparatedValues.SepWriter To(in this nietras.SeparatedValues.SepWriterOptions options, System.IO.TextWriter writer) { } public static nietras.SeparatedValues.SepWriter To(in this nietras.SeparatedValues.SepWriterOptions options, System.Text.StringBuilder stringBuilder) { } public static nietras.SeparatedValues.SepWriter To(in this nietras.SeparatedValues.SepWriterOptions options, System.IO.Stream stream, bool leaveOpen) { } public static nietras.SeparatedValues.SepWriter To(in this nietras.SeparatedValues.SepWriterOptions options, System.IO.TextWriter writer, bool leaveOpen) { } public static nietras.SeparatedValues.SepWriter To(in this nietras.SeparatedValues.SepWriterOptions options, string name, System.Func&lt;string, System.IO.Stream&gt; nameToStream, bool leaveOpen = false) { } public static nietras.SeparatedValues.SepWriter To(in this nietras.SeparatedValues.SepWriterOptions options, string name, System.Func&lt;string, System.IO.TextWriter&gt; nameToWriter, bool leaveOpen = false) { } public static nietras.SeparatedValues.SepWriter ToFile(in this nietras.SeparatedValues.SepWriterOptions options, string filePath) { } public static nietras.SeparatedValues.SepWriter ToText(in this nietras.SeparatedValues.SepWriterOptions options) { } public static nietras.SeparatedValues.SepWriter ToText(in this nietras.SeparatedValues.SepWriterOptions options, int capacity) { } public static nietras.SeparatedValues.SepWriterOptions Writer(this nietras.SeparatedValues.Sep sep) { } public static nietras.SeparatedValues.SepWriterOptions Writer(this nietras.SeparatedValues.SepSpec spec) { } public static nietras.SeparatedValues.SepWriterOptions Writer(this nietras.SeparatedValues.Sep sep, System.Func&lt;nietras.SeparatedValues.SepWriterOptions, nietras.SeparatedValues.SepWriterOptions&gt; configure) { } public static nietras.SeparatedValues.SepWriterOptions Writer(this nietras.SeparatedValues.SepSpec spec, System.Func&lt;nietras.SeparatedValues.SepWriterOptions, nietras.SeparatedValues.SepWriterOptions&gt; configure) { } } [System.Diagnostics.DebuggerDisplay(&quot;{DebuggerDisplay,nq}&quot;)] [System.Diagnostics.DebuggerTypeProxy(typeof(nietras.SeparatedValues.SepWriterHeader.DebugView))] public sealed class SepWriterHeader { public void Add(System.Collections.Generic.IReadOnlyList&lt;string&gt; colNames) { } public void Add([System.Runtime.CompilerServices.ParamCollection] [System.Runtime.CompilerServices.ScopedRef] System.ReadOnlySpan&lt;string&gt; colNames) { } public void Add(string colName) { } public void Add(string[] colNames) { } public void Write() { } public System.Threading.Tasks.ValueTask WriteAsync(System.Threading.CancellationToken cancellationToken = default) { } } public readonly struct SepWriterOptions : System.IEquatable&lt;nietras.SeparatedValues.SepWriterOptions&gt; { public SepWriterOptions() { } public SepWriterOptions(nietras.SeparatedValues.Sep sep) { } public bool AsyncContinueOnCapturedContext { get; init; } public nietras.SeparatedValues.SepColNotSetOption ColNotSetOption { get; init; } public System.Globalization.CultureInfo? CultureInfo { get; init; } public bool DisableColCountCheck { get; init; } public bool Escape { get; init; } public nietras.SeparatedValues.Sep Sep { get; init; } public bool WriteHeader { get; init; } } }"><pre><span class="pl-kos">[</span>assembly<span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">CLSCompliant</span><span class="pl-kos">(</span><span class="pl-c1">false</span><span class="pl-kos">)</span><span class="pl-kos">]</span> <span class="pl-kos">[</span>assembly<span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Reflection</span><span class="pl-kos">.</span><span class="pl-s1">AssemblyMetadata</span><span class="pl-kos">(</span><span class="pl-s">"IsTrimmable"</span><span class="pl-kos">,</span> <span class="pl-s">"True"</span><span class="pl-kos">)</span><span class="pl-kos">]</span> <span class="pl-kos">[</span>assembly<span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Reflection</span><span class="pl-kos">.</span><span class="pl-s1">AssemblyMetadata</span><span class="pl-kos">(</span><span class="pl-s">"RepositoryUrl"</span><span class="pl-kos">,</span> <span class="pl-s">"https://github.com/nietras/Sep/"</span><span class="pl-kos">)</span><span class="pl-kos">]</span> <span class="pl-kos">[</span>assembly<span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Resources</span><span class="pl-kos">.</span><span class="pl-s1">NeutralResourcesLanguage</span><span class="pl-kos">(</span><span class="pl-s">"en"</span><span class="pl-kos">)</span><span class="pl-kos">]</span> <span class="pl-kos">[</span>assembly<span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Runtime</span><span class="pl-kos">.</span><span class="pl-s1">CompilerServices</span><span class="pl-kos">.</span><span class="pl-s1">InternalsVisibleTo</span><span class="pl-kos">(</span><span class="pl-s">"Sep.Benchmarks"</span><span class="pl-kos">)</span><span class="pl-kos">]</span> <span class="pl-kos">[</span>assembly<span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Runtime</span><span class="pl-kos">.</span><span class="pl-s1">CompilerServices</span><span class="pl-kos">.</span><span class="pl-s1">InternalsVisibleTo</span><span class="pl-kos">(</span><span class="pl-s">"Sep.ComparisonBenchmarks"</span><span class="pl-kos">)</span><span class="pl-kos">]</span> <span class="pl-kos">[</span>assembly<span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Runtime</span><span class="pl-kos">.</span><span class="pl-s1">CompilerServices</span><span class="pl-kos">.</span><span class="pl-s1">InternalsVisibleTo</span><span class="pl-kos">(</span><span class="pl-s">"Sep.Test"</span><span class="pl-kos">)</span><span class="pl-kos">]</span> <span class="pl-kos">[</span>assembly<span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Runtime</span><span class="pl-kos">.</span><span class="pl-s1">CompilerServices</span><span class="pl-kos">.</span><span class="pl-s1">InternalsVisibleTo</span><span class="pl-kos">(</span><span class="pl-s">"Sep.XyzTest"</span><span class="pl-kos">)</span><span class="pl-kos">]</span> <span class="pl-kos">[</span>assembly<span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Runtime</span><span class="pl-kos">.</span><span class="pl-s1">Versioning</span><span class="pl-kos">.</span><span class="pl-s1">TargetFramework</span><span class="pl-kos">(</span><span class="pl-s">".NETCoreApp,Version=v9.0"</span><span class="pl-kos">,</span> <span class="pl-s1">FrameworkDisplayName</span><span class="pl-c1">=</span><span class="pl-s">".NET 9.0"</span><span class="pl-kos">)</span><span class="pl-kos">]</span> <span class="pl-k">namespace</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span> <span class="pl-kos">{</span> <span class="pl-k">public</span> <span class="pl-k">readonly</span> <span class="pl-k">struct</span> <span class="pl-smi">Sep</span> <span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">IEquatable</span><span class="pl-c1">&lt;</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">Sep</span><span class="pl-c1">&gt;</span> <span class="pl-kos">{</span> <span class="pl-k">public</span> <span class="pl-v">Sep</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-v">Sep</span><span class="pl-kos">(</span><span class="pl-smi">char</span> <span class="pl-s1">separator</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">char</span> <span class="pl-s1">Separator</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">Sep</span><span class="pl-c1">?</span> <span class="pl-s1">Auto</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">Sep</span> <span class="pl-s1">Default</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">Sep</span> <span class="pl-en">New</span><span class="pl-kos">(</span><span class="pl-smi">char</span> <span class="pl-s1">separator</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span> <span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span> <span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">Func</span><span class="pl-c1">&lt;</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span><span class="pl-kos">,</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span><span class="pl-c1">&gt;</span> <span class="pl-s1">configure</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterOptions</span> <span class="pl-en">Writer</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterOptions</span> <span class="pl-en">Writer</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">Func</span><span class="pl-c1">&lt;</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterOptions</span><span class="pl-kos">,</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterOptions</span><span class="pl-c1">&gt;</span> <span class="pl-s1">configure</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k">enum</span> <span class="pl-smi">SepColNotSetOption</span> <span class="pl-c1">:</span> <span class="pl-smi">byte</span> <span class="pl-kos">{</span> <span class="pl-c1">Throw</span> <span class="pl-c1">=</span> <span class="pl-c1">0</span><span class="pl-kos">,</span> <span class="pl-c1">Empty</span> <span class="pl-c1">=</span> <span class="pl-c1">1</span><span class="pl-kos">,</span> <span class="pl-c1">Skip</span> <span class="pl-c1">=</span> <span class="pl-c1">2</span><span class="pl-kos">,</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k">delegate</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepToString</span> <span class="pl-s1">SepCreateToString</span><span class="pl-kos">(</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderHeader</span><span class="pl-c1">?</span> <span class="pl-s1">maybeHeader</span><span class="pl-kos">,</span> <span class="pl-smi">int</span> <span class="pl-s1">colCount</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-k">class</span> <span class="pl-smi">SepDefaults</span> <span class="pl-kos">{</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">StringComparer</span> <span class="pl-s1">ColNameComparer</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Globalization</span><span class="pl-kos">.</span><span class="pl-s1">CultureInfo</span> <span class="pl-s1">CultureInfo</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-smi">char</span> <span class="pl-s1">Separator</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span> <span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Diagnostics</span><span class="pl-kos">.</span><span class="pl-s1">DebuggerDisplay</span><span class="pl-kos">(</span><span class="pl-s">"{DebuggerDisplay,nq}"</span><span class="pl-kos">)</span><span class="pl-kos">]</span> <span class="pl-k">public</span> <span class="pl-k">sealed</span> <span class="pl-k">class</span> <span class="pl-smi">SepReader</span> <span class="pl-c1">:</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderState</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">Generic</span><span class="pl-kos">.</span><span class="pl-smi">IAsyncEnumerable</span><span class="pl-c1">&lt;</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Row</span><span class="pl-c1">&gt;</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">Generic</span><span class="pl-kos">.</span><span class="pl-smi">IEnumerable</span><span class="pl-c1">&lt;</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Row</span><span class="pl-c1">&gt;</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">Generic</span><span class="pl-kos">.</span><span class="pl-smi">IEnumerator</span><span class="pl-c1">&lt;</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Row</span><span class="pl-c1">&gt;</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">IEnumerable</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">IEnumerator</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IDisposable</span> <span class="pl-kos">{</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Row</span> <span class="pl-s1">Current</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">HasHeader</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">HasRows</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderHeader</span> <span class="pl-s1">Header</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">IsEmpty</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepSpec</span> <span class="pl-s1">Spec</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">AsyncEnumerator</span> <span class="pl-en">GetAsyncEnumerator</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">CancellationToken</span> <span class="pl-s1">cancellationToken</span> <span class="pl-c1">=</span> <span class="pl-k">default</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span> <span class="pl-en">GetEnumerator</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-en">MoveNext</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">Tasks</span><span class="pl-kos">.</span><span class="pl-smi">ValueTask</span><span class="pl-c1">&lt;</span><span class="pl-smi">bool</span><span class="pl-c1">&gt;</span> <span class="pl-en">MoveNextAsync</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">CancellationToken</span> <span class="pl-s1">cancellationToken</span> <span class="pl-c1">=</span> <span class="pl-k">default</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">string</span> <span class="pl-en">ToString</span><span class="pl-kos">(</span><span class="pl-smi">int</span> <span class="pl-s1">index</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k">readonly</span> <span class="pl-k">struct</span> <span class="pl-smi">AsyncEnumerator</span> <span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">Generic</span><span class="pl-kos">.</span><span class="pl-smi">IAsyncEnumerator</span><span class="pl-c1">&lt;</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Row</span><span class="pl-c1">&gt;</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IAsyncDisposable</span> <span class="pl-kos">{</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Row</span> <span class="pl-s1">Current</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">Tasks</span><span class="pl-kos">.</span><span class="pl-s1">ValueTask</span> <span class="pl-en">DisposeAsync</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">Tasks</span><span class="pl-kos">.</span><span class="pl-smi">ValueTask</span><span class="pl-c1">&lt;</span><span class="pl-smi">bool</span><span class="pl-c1">&gt;</span> <span class="pl-en">MoveNextAsync</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span> <span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Diagnostics</span><span class="pl-kos">.</span><span class="pl-s1">DebuggerDisplay</span><span class="pl-kos">(</span><span class="pl-s">"{DebuggerDisplay}"</span><span class="pl-kos">)</span><span class="pl-kos">]</span> <span class="pl-k">public</span> <span class="pl-k">readonly</span> <span class="pl-k">ref</span> <span class="pl-k">struct</span> <span class="pl-smi">Col</span> <span class="pl-kos">{</span> <span class="pl-k">public</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ReadOnlySpan</span><span class="pl-c1">&lt;</span><span class="pl-smi">char</span><span class="pl-c1">&gt;</span> <span class="pl-s1">Span</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">T</span> <span class="pl-en">Parse</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-k">where</span> <span class="pl-c1">T</span> <span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ISpanParsable</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k">override</span> <span class="pl-smi">string</span> <span class="pl-en">ToString</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">T</span><span class="pl-c1">?</span> <span class="pl-en">TryParse</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-k">where</span> <span class="pl-c1">T</span> <span class="pl-c1">:</span> <span class="pl-k">struct</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ISpanParsable</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-en">TryParse</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-k">out</span> <span class="pl-smi">T</span> <span class="pl-s1">value</span><span class="pl-kos">)</span> <span class="pl-k">where</span> <span class="pl-c1">T</span> <span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ISpanParsable</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k">readonly</span> <span class="pl-k">ref</span> <span class="pl-k">struct</span> <span class="pl-smi">Cols</span> <span class="pl-kos">{</span> <span class="pl-k">public</span> <span class="pl-smi">int</span> <span class="pl-s1">Count</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Col</span> <span class="pl-k">this</span><span class="pl-kos">[</span><span class="pl-smi">int</span> <span class="pl-s1">index</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">string</span> <span class="pl-en">CombinePathsToString</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ReadOnlySpan</span><span class="pl-c1">&lt;</span><span class="pl-smi">char</span><span class="pl-c1">&gt;</span> <span class="pl-en">Join</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ReadOnlySpan</span><span class="pl-c1">&lt;</span><span class="pl-smi">char</span><span class="pl-c1">&gt;</span> <span class="pl-s1">separator</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">string</span> <span class="pl-en">JoinPathsToString</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">string</span> <span class="pl-en">JoinToString</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ReadOnlySpan</span><span class="pl-c1">&lt;</span><span class="pl-smi">char</span><span class="pl-c1">&gt;</span> <span class="pl-s1">separator</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">Span</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-en">Parse</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-k">where</span> <span class="pl-c1">T</span> <span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ISpanParsable</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Parse</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">Span</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-s1">span</span><span class="pl-kos">)</span> <span class="pl-k">where</span> <span class="pl-c1">T</span> <span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ISpanParsable</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">T</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-en">ParseToArray</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-k">where</span> <span class="pl-c1">T</span> <span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ISpanParsable</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">Span</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-en">Select</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-smi">method</span> <span class="pl-s1">selector</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">Span</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-en">Select</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-smi">ColFunc</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-s1">selector</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">Span</span><span class="pl-c1">&lt;</span><span class="pl-smi">string</span><span class="pl-c1">&gt;</span> <span class="pl-en">ToStrings</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">string</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-en">ToStringsArray</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">Span</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">?</span><span class="pl-c1">&gt;</span> <span class="pl-en">TryParse</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-k">where</span> <span class="pl-c1">T</span> <span class="pl-c1">:</span> <span class="pl-k">struct</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ISpanParsable</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">TryParse</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">Span</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">?</span><span class="pl-c1">&gt;</span> <span class="pl-s1">span</span><span class="pl-kos">)</span> <span class="pl-k">where</span> <span class="pl-c1">T</span> <span class="pl-c1">:</span> <span class="pl-k">struct</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ISpanParsable</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span> <span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Diagnostics</span><span class="pl-kos">.</span><span class="pl-s1">DebuggerDisplay</span><span class="pl-kos">(</span><span class="pl-s">"{DebuggerDisplayPrefix,nq}{Span}"</span><span class="pl-kos">)</span><span class="pl-kos">]</span> <span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Diagnostics</span><span class="pl-kos">.</span><span class="pl-s1">DebuggerTypeProxy</span><span class="pl-kos">(</span><span class="pl-k">typeof</span><span class="pl-kos">(</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Row</span><span class="pl-kos">.</span><span class="pl-s1">DebugView</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">]</span> <span class="pl-k">public</span> <span class="pl-k">readonly</span> <span class="pl-k">ref</span> <span class="pl-k">struct</span> <span class="pl-smi">Row</span> <span class="pl-kos">{</span> <span class="pl-k">public</span> <span class="pl-smi">int</span> <span class="pl-s1">ColCount</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Col</span> <span class="pl-k">this</span><span class="pl-kos">[</span><span class="pl-smi">int</span> <span class="pl-s1">index</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Col</span> <span class="pl-k">this</span><span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Index</span> <span class="pl-s1">index</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Col</span> <span class="pl-k">this</span><span class="pl-kos">[</span><span class="pl-smi">string</span> <span class="pl-s1">colName</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Cols</span> <span class="pl-k">this</span><span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Range</span> <span class="pl-s1">range</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Cols</span> <span class="pl-k">this</span><span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ReadOnlySpan</span><span class="pl-c1">&lt;</span><span class="pl-smi">int</span><span class="pl-c1">&gt;</span> <span class="pl-s1">indices</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Cols</span> <span class="pl-k">this</span><span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">Generic</span><span class="pl-kos">.</span><span class="pl-smi">IReadOnlyList</span><span class="pl-c1">&lt;</span><span class="pl-smi">int</span><span class="pl-c1">&gt;</span> <span class="pl-s1">indices</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Cols</span> <span class="pl-k">this</span><span class="pl-kos">[</span><span class="pl-smi">int</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-s1">indices</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Cols</span> <span class="pl-k">this</span><span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ReadOnlySpan</span><span class="pl-c1">&lt;</span><span class="pl-smi">string</span><span class="pl-c1">&gt;</span> <span class="pl-s1">colNames</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Cols</span> <span class="pl-k">this</span><span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">Generic</span><span class="pl-kos">.</span><span class="pl-smi">IReadOnlyList</span><span class="pl-c1">&lt;</span><span class="pl-smi">string</span><span class="pl-c1">&gt;</span> <span class="pl-s1">colNames</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Cols</span> <span class="pl-k">this</span><span class="pl-kos">[</span><span class="pl-smi">string</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-s1">colNames</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">int</span> <span class="pl-s1">LineNumberFrom</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">int</span> <span class="pl-s1">LineNumberToExcl</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">int</span> <span class="pl-s1">RowIndex</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ReadOnlySpan</span><span class="pl-c1">&lt;</span><span class="pl-smi">char</span><span class="pl-c1">&gt;</span> <span class="pl-s1">Span</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">Func</span><span class="pl-c1">&lt;</span><span class="pl-smi">int</span><span class="pl-kos">,</span> <span class="pl-smi">string</span><span class="pl-c1">&gt;</span> <span class="pl-s1">UnsafeToStringDelegate</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k">override</span> <span class="pl-smi">string</span> <span class="pl-en">ToString</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k">delegate</span> <span class="pl-smi">void</span> <span class="pl-s1">ColAction</span><span class="pl-kos">(</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Col</span> <span class="pl-s1">col</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">public</span> <span class="pl-k">delegate</span> <span class="pl-smi">T</span> <span class="pl-s1">ColFunc</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Col</span> <span class="pl-s1">col</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">public</span> <span class="pl-k">delegate</span> <span class="pl-smi">void</span> <span class="pl-s1">ColsAction</span><span class="pl-kos">(</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Cols</span> <span class="pl-s1">col</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">public</span> <span class="pl-k">delegate</span> <span class="pl-smi">void</span> <span class="pl-s1">RowAction</span><span class="pl-kos">(</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Row</span> <span class="pl-s1">row</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">public</span> <span class="pl-k">delegate</span> <span class="pl-smi">T</span> <span class="pl-s1">RowFunc</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Row</span> <span class="pl-s1">row</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">public</span> <span class="pl-k">delegate</span> <span class="pl-smi">bool</span> <span class="pl-s1">RowTryFunc</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Row</span> <span class="pl-s1">row</span><span class="pl-kos">,</span> <span class="pl-k">out</span> <span class="pl-smi">T</span> <span class="pl-s1">value</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-k">class</span> <span class="pl-smi">SepReaderExtensions</span> <span class="pl-kos">{</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">Generic</span><span class="pl-kos">.</span><span class="pl-smi">IEnumerable</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-en">Enumerate</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span> <span class="pl-s1">reader</span><span class="pl-kos">,</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-smi">RowFunc</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-s1"><span class="pl-k">select</span></span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">Generic</span><span class="pl-kos">.</span><span class="pl-smi">IEnumerable</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-en">Enumerate</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span> <span class="pl-s1">reader</span><span class="pl-kos">,</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-smi">RowTryFunc</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-s1">trySelect</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">Generic</span><span class="pl-kos">.</span><span class="pl-smi">IAsyncEnumerable</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-en">EnumerateAsync</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span> <span class="pl-s1">reader</span><span class="pl-kos">,</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-smi">RowFunc</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-s1"><span class="pl-k">select</span></span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">Generic</span><span class="pl-kos">.</span><span class="pl-smi">IAsyncEnumerable</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-en">EnumerateAsync</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span> <span class="pl-s1">reader</span><span class="pl-kos">,</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-smi">RowTryFunc</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-s1">trySelect</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span> <span class="pl-en">From</span><span class="pl-kos">(</span><span class="pl-k">in</span> <span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-smi">byte</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-s1">buffer</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span> <span class="pl-en">From</span><span class="pl-kos">(</span><span class="pl-k">in</span> <span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IO</span><span class="pl-kos">.</span><span class="pl-s1">Stream</span> <span class="pl-s1">stream</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span> <span class="pl-en">From</span><span class="pl-kos">(</span><span class="pl-k">in</span> <span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IO</span><span class="pl-kos">.</span><span class="pl-s1">TextReader</span> <span class="pl-s1">reader</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span> <span class="pl-en">From</span><span class="pl-kos">(</span><span class="pl-k">in</span> <span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-smi">string</span> <span class="pl-s1">name</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">Func</span><span class="pl-c1">&lt;</span><span class="pl-smi">string</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IO</span><span class="pl-kos">.</span><span class="pl-s1">Stream</span><span class="pl-c1">&gt;</span> <span class="pl-s1">nameToStream</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span> <span class="pl-en">From</span><span class="pl-kos">(</span><span class="pl-k">in</span> <span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-smi">string</span> <span class="pl-s1">name</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">Func</span><span class="pl-c1">&lt;</span><span class="pl-smi">string</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IO</span><span class="pl-kos">.</span><span class="pl-s1">TextReader</span><span class="pl-c1">&gt;</span> <span class="pl-s1">nameToReader</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">Tasks</span><span class="pl-kos">.</span><span class="pl-smi">ValueTask</span><span class="pl-c1">&lt;</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-c1">&gt;</span> <span class="pl-en">FromAsync</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-smi">byte</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-s1">buffer</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">CancellationToken</span> <span class="pl-s1">cancellationToken</span> <span class="pl-c1">=</span> <span class="pl-k">default</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">Tasks</span><span class="pl-kos">.</span><span class="pl-smi">ValueTask</span><span class="pl-c1">&lt;</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-c1">&gt;</span> <span class="pl-en">FromAsync</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IO</span><span class="pl-kos">.</span><span class="pl-s1">Stream</span> <span class="pl-s1">stream</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">CancellationToken</span> <span class="pl-s1">cancellationToken</span> <span class="pl-c1">=</span> <span class="pl-k">default</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">Tasks</span><span class="pl-kos">.</span><span class="pl-smi">ValueTask</span><span class="pl-c1">&lt;</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-c1">&gt;</span> <span class="pl-en">FromAsync</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IO</span><span class="pl-kos">.</span><span class="pl-s1">TextReader</span> <span class="pl-s1">reader</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">CancellationToken</span> <span class="pl-s1">cancellationToken</span> <span class="pl-c1">=</span> <span class="pl-k">default</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">Tasks</span><span class="pl-kos">.</span><span class="pl-smi">ValueTask</span><span class="pl-c1">&lt;</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-c1">&gt;</span> <span class="pl-en">FromAsync</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-smi">string</span> <span class="pl-s1">name</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">Func</span><span class="pl-c1">&lt;</span><span class="pl-smi">string</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IO</span><span class="pl-kos">.</span><span class="pl-s1">Stream</span><span class="pl-c1">&gt;</span> <span class="pl-s1">nameToStream</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">CancellationToken</span> <span class="pl-s1">cancellationToken</span> <span class="pl-c1">=</span> <span class="pl-k">default</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">Tasks</span><span class="pl-kos">.</span><span class="pl-smi">ValueTask</span><span class="pl-c1">&lt;</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-c1">&gt;</span> <span class="pl-en">FromAsync</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-smi">string</span> <span class="pl-s1">name</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">Func</span><span class="pl-c1">&lt;</span><span class="pl-smi">string</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IO</span><span class="pl-kos">.</span><span class="pl-s1">TextReader</span><span class="pl-c1">&gt;</span> <span class="pl-s1">nameToReader</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">CancellationToken</span> <span class="pl-s1">cancellationToken</span> <span class="pl-c1">=</span> <span class="pl-k">default</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span> <span class="pl-en">FromFile</span><span class="pl-kos">(</span><span class="pl-k">in</span> <span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-smi">string</span> <span class="pl-s1">filePath</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">Tasks</span><span class="pl-kos">.</span><span class="pl-smi">ValueTask</span><span class="pl-c1">&lt;</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-c1">&gt;</span> <span class="pl-en">FromFileAsync</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-smi">string</span> <span class="pl-s1">filePath</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">CancellationToken</span> <span class="pl-s1">cancellationToken</span> <span class="pl-c1">=</span> <span class="pl-k">default</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span> <span class="pl-en">FromText</span><span class="pl-kos">(</span><span class="pl-k">in</span> <span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-smi">string</span> <span class="pl-s1">text</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">Tasks</span><span class="pl-kos">.</span><span class="pl-smi">ValueTask</span><span class="pl-c1">&lt;</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-c1">&gt;</span> <span class="pl-en">FromTextAsync</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-smi">string</span> <span class="pl-s1">text</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">CancellationToken</span> <span class="pl-s1">cancellationToken</span> <span class="pl-c1">=</span> <span class="pl-k">default</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">Generic</span><span class="pl-kos">.</span><span class="pl-smi">IEnumerable</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-en">ParallelEnumerate</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span> <span class="pl-s1">reader</span><span class="pl-kos">,</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-smi">RowFunc</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-s1"><span class="pl-k">select</span></span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">Generic</span><span class="pl-kos">.</span><span class="pl-smi">IEnumerable</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-en">ParallelEnumerate</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span> <span class="pl-s1">reader</span><span class="pl-kos">,</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-smi">RowTryFunc</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-s1">trySelect</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">Generic</span><span class="pl-kos">.</span><span class="pl-smi">IEnumerable</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-en">ParallelEnumerate</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span> <span class="pl-s1">reader</span><span class="pl-kos">,</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-smi">RowFunc</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-s1"><span class="pl-k">select</span></span><span class="pl-kos">,</span> <span class="pl-smi">int</span> <span class="pl-s1">degreeOfParallism</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">Generic</span><span class="pl-kos">.</span><span class="pl-smi">IEnumerable</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-en">ParallelEnumerate</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span> <span class="pl-s1">reader</span><span class="pl-kos">,</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-smi">RowTryFunc</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-s1">trySelect</span><span class="pl-kos">,</span> <span class="pl-smi">int</span> <span class="pl-s1">degreeOfParallism</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span> <span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">Sep</span> <span class="pl-s1">sep</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span> <span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">Sep</span><span class="pl-c1">?</span> <span class="pl-s1">sep</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span> <span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepSpec</span> <span class="pl-s1">spec</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span> <span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">Sep</span> <span class="pl-s1">sep</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">Func</span><span class="pl-c1">&lt;</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span><span class="pl-kos">,</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span><span class="pl-c1">&gt;</span> <span class="pl-s1">configure</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span> <span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">Sep</span><span class="pl-c1">?</span> <span class="pl-s1">sep</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">Func</span><span class="pl-c1">&lt;</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span><span class="pl-kos">,</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span><span class="pl-c1">&gt;</span> <span class="pl-s1">configure</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span> <span class="pl-en">Reader</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepSpec</span> <span class="pl-s1">spec</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">Func</span><span class="pl-c1">&lt;</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span><span class="pl-kos">,</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span><span class="pl-c1">&gt;</span> <span class="pl-s1">configure</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k">sealed</span> <span class="pl-k">class</span> <span class="pl-smi">SepReaderHeader</span> <span class="pl-kos">{</span> <span class="pl-k">public</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">Generic</span><span class="pl-kos">.</span><span class="pl-smi">IReadOnlyList</span><span class="pl-c1">&lt;</span><span class="pl-smi">string</span><span class="pl-c1">&gt;</span> <span class="pl-s1">ColNames</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">IsEmpty</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderHeader</span> <span class="pl-s1">Empty</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">int</span> <span class="pl-en">IndexOf</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ReadOnlySpan</span><span class="pl-c1">&lt;</span><span class="pl-smi">char</span><span class="pl-c1">&gt;</span> <span class="pl-s1">colName</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">int</span> <span class="pl-en">IndexOf</span><span class="pl-kos">(</span><span class="pl-smi">string</span> <span class="pl-s1">colName</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">int</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-en">IndicesOf</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">Generic</span><span class="pl-kos">.</span><span class="pl-smi">IReadOnlyList</span><span class="pl-c1">&lt;</span><span class="pl-smi">string</span><span class="pl-c1">&gt;</span> <span class="pl-s1">colNames</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">int</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-en">IndicesOf</span><span class="pl-kos">(</span><span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Runtime</span><span class="pl-kos">.</span><span class="pl-s1">CompilerServices</span><span class="pl-kos">.</span><span class="pl-s1">ParamCollection</span><span class="pl-kos">]</span> <span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Runtime</span><span class="pl-kos">.</span><span class="pl-s1">CompilerServices</span><span class="pl-kos">.</span><span class="pl-s1">ScopedRef</span><span class="pl-kos">]</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ReadOnlySpan</span><span class="pl-c1">&lt;</span><span class="pl-smi">string</span><span class="pl-c1">&gt;</span> <span class="pl-s1">colNames</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">int</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-en">IndicesOf</span><span class="pl-kos">(</span><span class="pl-k">params</span> <span class="pl-smi">string</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-s1">colNames</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">IndicesOf</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ReadOnlySpan</span><span class="pl-c1">&lt;</span><span class="pl-smi">string</span><span class="pl-c1">&gt;</span> <span class="pl-s1">colNames</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">Span</span><span class="pl-c1">&lt;</span><span class="pl-smi">int</span><span class="pl-c1">&gt;</span> <span class="pl-s1">colIndices</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">Generic</span><span class="pl-kos">.</span><span class="pl-smi">IReadOnlyList</span><span class="pl-c1">&lt;</span><span class="pl-smi">string</span><span class="pl-c1">&gt;</span> <span class="pl-en">NamesStartingWith</span><span class="pl-kos">(</span><span class="pl-smi">string</span> <span class="pl-s1">prefix</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">StringComparison</span> <span class="pl-s1">comparison</span> <span class="pl-c1">=</span> <span class="pl-c1">4</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k">override</span> <span class="pl-smi">string</span> <span class="pl-en">ToString</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-en">TryIndexOf</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ReadOnlySpan</span><span class="pl-c1">&lt;</span><span class="pl-smi">char</span><span class="pl-c1">&gt;</span> <span class="pl-s1">colName</span><span class="pl-kos">,</span> <span class="pl-k">out</span> <span class="pl-smi">int</span> <span class="pl-s1">colIndex</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-en">TryIndexOf</span><span class="pl-kos">(</span><span class="pl-smi">string</span> <span class="pl-s1">colName</span><span class="pl-kos">,</span> <span class="pl-k">out</span> <span class="pl-smi">int</span> <span class="pl-s1">colIndex</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k">readonly</span> <span class="pl-k">struct</span> <span class="pl-smi">SepReaderOptions</span> <span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">IEquatable</span><span class="pl-c1">&lt;</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReaderOptions</span><span class="pl-c1">&gt;</span> <span class="pl-kos">{</span> <span class="pl-k">public</span> <span class="pl-v">SepReaderOptions</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-v">SepReaderOptions</span><span class="pl-kos">(</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">Sep</span><span class="pl-c1">?</span> <span class="pl-s1">sep</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">AsyncContinueOnCapturedContext</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">Generic</span><span class="pl-kos">.</span><span class="pl-smi">IEqualityComparer</span><span class="pl-c1">&lt;</span><span class="pl-smi">string</span><span class="pl-c1">&gt;</span> <span class="pl-s1">ColNameComparer</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepCreateToString</span> <span class="pl-s1">CreateToString</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Globalization</span><span class="pl-kos">.</span><span class="pl-s1">CultureInfo</span><span class="pl-c1">?</span> <span class="pl-s1">CultureInfo</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">DisableColCountCheck</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">DisableFastFloat</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">DisableQuotesParsing</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">HasHeader</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">int</span> <span class="pl-s1">InitialBufferLength</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">Sep</span><span class="pl-c1">?</span> <span class="pl-s1">Sep</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepTrim</span> <span class="pl-s1">Trim</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">Unescape</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k">class</span> <span class="pl-smi">SepReaderState</span> <span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IDisposable</span> <span class="pl-kos">{</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Dispose</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-k">class</span> <span class="pl-smi">SepReaderWriterExtensions</span> <span class="pl-kos">{</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-smi">void</span> <span class="pl-en">CopyTo</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Row</span> <span class="pl-s1">readerRow</span><span class="pl-kos">,</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span><span class="pl-kos">.</span><span class="pl-s1">Row</span> <span class="pl-s1">writerRow</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span><span class="pl-kos">.</span><span class="pl-s1">Row</span> <span class="pl-en">NewRow</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span> <span class="pl-s1">writer</span><span class="pl-kos">,</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Row</span> <span class="pl-s1">rowToCopy</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span><span class="pl-kos">.</span><span class="pl-s1">Row</span> <span class="pl-en">NewRow</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span> <span class="pl-s1">writer</span><span class="pl-kos">,</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Row</span> <span class="pl-s1">rowToCopy</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">CancellationToken</span> <span class="pl-s1">cancellationToken</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k">readonly</span> <span class="pl-k">struct</span> <span class="pl-smi">SepSpec</span> <span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">IEquatable</span><span class="pl-c1">&lt;</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepSpec</span><span class="pl-c1">&gt;</span> <span class="pl-kos">{</span> <span class="pl-k">public</span> <span class="pl-v">SepSpec</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-v">SepSpec</span><span class="pl-kos">(</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">Sep</span> <span class="pl-s1">sep</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Globalization</span><span class="pl-kos">.</span><span class="pl-s1">CultureInfo</span><span class="pl-c1">?</span> <span class="pl-s1">cultureInfo</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-v">SepSpec</span><span class="pl-kos">(</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">Sep</span> <span class="pl-s1">sep</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Globalization</span><span class="pl-kos">.</span><span class="pl-s1">CultureInfo</span><span class="pl-c1">?</span> <span class="pl-s1">cultureInfo</span><span class="pl-kos">,</span> <span class="pl-smi">bool</span> <span class="pl-s1">asyncContinueOnCapturedContext</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">AsyncContinueOnCapturedContext</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Globalization</span><span class="pl-kos">.</span><span class="pl-s1">CultureInfo</span><span class="pl-c1">?</span> <span class="pl-s1">CultureInfo</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">Sep</span> <span class="pl-s1">Sep</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k">abstract</span> <span class="pl-k">class</span> <span class="pl-smi">SepToString</span> <span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IDisposable</span> <span class="pl-kos">{</span> <span class="pl-k">protected</span> <span class="pl-v">SepToString</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k">virtual</span> <span class="pl-smi">bool</span> <span class="pl-s1">IsThreadSafe</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepCreateToString</span> <span class="pl-s1">Direct</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Dispose</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">protected</span> <span class="pl-k">virtual</span> <span class="pl-smi">void</span> <span class="pl-en">Dispose</span><span class="pl-kos">(</span><span class="pl-smi">bool</span> <span class="pl-s1">disposing</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k">abstract</span> <span class="pl-smi">string</span> <span class="pl-en">ToString</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ReadOnlySpan</span><span class="pl-c1">&lt;</span><span class="pl-smi">char</span><span class="pl-c1">&gt;</span> <span class="pl-s1">colSpan</span><span class="pl-kos">,</span> <span class="pl-smi">int</span> <span class="pl-s1">colIndex</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepCreateToString</span> <span class="pl-en">OnePool</span><span class="pl-kos">(</span><span class="pl-smi">int</span> <span class="pl-s1">maximumStringLength</span> <span class="pl-c1">=</span> <span class="pl-c1">32</span><span class="pl-kos">,</span> <span class="pl-smi">int</span> <span class="pl-s1">initialCapacity</span> <span class="pl-c1">=</span> <span class="pl-c1">64</span><span class="pl-kos">,</span> <span class="pl-smi">int</span> <span class="pl-s1">maximumCapacity</span> <span class="pl-c1">=</span> <span class="pl-c1">4096</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepCreateToString</span> <span class="pl-en">PoolPerCol</span><span class="pl-kos">(</span><span class="pl-smi">int</span> <span class="pl-s1">maximumStringLength</span> <span class="pl-c1">=</span> <span class="pl-c1">32</span><span class="pl-kos">,</span> <span class="pl-smi">int</span> <span class="pl-s1">initialCapacity</span> <span class="pl-c1">=</span> <span class="pl-c1">64</span><span class="pl-kos">,</span> <span class="pl-smi">int</span> <span class="pl-s1">maximumCapacity</span> <span class="pl-c1">=</span> <span class="pl-c1">4096</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepCreateToString</span> <span class="pl-en">PoolPerColThreadSafe</span><span class="pl-kos">(</span><span class="pl-smi">int</span> <span class="pl-s1">maximumStringLength</span> <span class="pl-c1">=</span> <span class="pl-c1">32</span><span class="pl-kos">,</span> <span class="pl-smi">int</span> <span class="pl-s1">initialCapacity</span> <span class="pl-c1">=</span> <span class="pl-c1">64</span><span class="pl-kos">,</span> <span class="pl-smi">int</span> <span class="pl-s1">maximumCapacity</span> <span class="pl-c1">=</span> <span class="pl-c1">4096</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepCreateToString</span> <span class="pl-en">PoolPerColThreadSafeFixedCapacity</span><span class="pl-kos">(</span><span class="pl-smi">int</span> <span class="pl-s1">maximumStringLength</span> <span class="pl-c1">=</span> <span class="pl-c1">32</span><span class="pl-kos">,</span> <span class="pl-smi">int</span> <span class="pl-s1">capacity</span> <span class="pl-c1">=</span> <span class="pl-c1">2048</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span> <span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Flags</span><span class="pl-kos">]</span> <span class="pl-k">public</span> <span class="pl-k">enum</span> <span class="pl-smi">SepTrim</span> <span class="pl-c1">:</span> <span class="pl-smi">byte</span> <span class="pl-kos">{</span> <span class="pl-c1">None</span> <span class="pl-c1">=</span> <span class="pl-c1">0</span><span class="pl-kos">,</span> <span class="pl-c1">Outer</span> <span class="pl-c1">=</span> <span class="pl-c1">1</span><span class="pl-kos">,</span> <span class="pl-c1">AfterUnescape</span> <span class="pl-c1">=</span> <span class="pl-c1">2</span><span class="pl-kos">,</span> <span class="pl-c1">All</span> <span class="pl-c1">=</span> <span class="pl-c1">3</span><span class="pl-kos">,</span> <span class="pl-kos">}</span> <span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Diagnostics</span><span class="pl-kos">.</span><span class="pl-s1">DebuggerDisplay</span><span class="pl-kos">(</span><span class="pl-s">"{DebuggerDisplay,nq}"</span><span class="pl-kos">)</span><span class="pl-kos">]</span> <span class="pl-k">public</span> <span class="pl-k">sealed</span> <span class="pl-k">class</span> <span class="pl-smi">SepWriter</span> <span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IAsyncDisposable</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IDisposable</span> <span class="pl-kos">{</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterHeader</span> <span class="pl-s1">Header</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepSpec</span> <span class="pl-s1">Spec</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Dispose</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">Tasks</span><span class="pl-kos">.</span><span class="pl-s1">ValueTask</span> <span class="pl-en">DisposeAsync</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Flush</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">Tasks</span><span class="pl-kos">.</span><span class="pl-s1">Task</span> <span class="pl-en">FlushAsync</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">CancellationToken</span> <span class="pl-s1">cancellationToken</span> <span class="pl-c1">=</span> <span class="pl-k">default</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span><span class="pl-kos">.</span><span class="pl-s1">Row</span> <span class="pl-en">NewRow</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span><span class="pl-kos">.</span><span class="pl-s1">Row</span> <span class="pl-en">NewRow</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">CancellationToken</span> <span class="pl-s1">cancellationToken</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k">override</span> <span class="pl-smi">string</span> <span class="pl-en">ToString</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k">readonly</span> <span class="pl-k">ref</span> <span class="pl-k">struct</span> <span class="pl-smi">Col</span> <span class="pl-kos">{</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Format</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-smi">T</span> <span class="pl-s1">value</span><span class="pl-kos">)</span> <span class="pl-k">where</span> <span class="pl-c1">T</span> <span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">ISpanFormattable</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Set</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ReadOnlySpan</span><span class="pl-c1">&lt;</span><span class="pl-smi">char</span><span class="pl-c1">&gt;</span> <span class="pl-s1">span</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Set</span><span class="pl-kos">(</span><span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Runtime</span><span class="pl-kos">.</span><span class="pl-s1">CompilerServices</span><span class="pl-kos">.</span><span class="pl-s1">InterpolatedStringHandlerArgument</span><span class="pl-kos">(</span><span class="pl-s">""</span><span class="pl-kos">)</span><span class="pl-kos">]</span> <span class="pl-k">ref</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span><span class="pl-kos">.</span><span class="pl-s1">Col</span><span class="pl-kos">.</span><span class="pl-s1">FormatInterpolatedStringHandler</span> <span class="pl-s1">handler</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Set</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IFormatProvider</span><span class="pl-c1">?</span> <span class="pl-s1">provider</span><span class="pl-kos">,</span> <span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Runtime</span><span class="pl-kos">.</span><span class="pl-s1">CompilerServices</span><span class="pl-kos">.</span><span class="pl-s1">InterpolatedStringHandlerArgument</span><span class="pl-kos">(</span><span class="pl-k">new</span> <span class="pl-smi">string</span><span class="pl-c1">?</span><span class="pl-kos">[</span><span class="pl-kos">]</span><span class="pl-c1">?</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-s">""</span><span class="pl-kos">,</span> <span class="pl-s">"provider"</span><span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">]</span> <span class="pl-k">ref</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span><span class="pl-kos">.</span><span class="pl-s1">Col</span><span class="pl-kos">.</span><span class="pl-s1">FormatInterpolatedStringHandler</span> <span class="pl-s1">handler</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Runtime</span><span class="pl-kos">.</span><span class="pl-s1">CompilerServices</span><span class="pl-kos">.</span><span class="pl-s1">InterpolatedStringHandler</span><span class="pl-kos">]</span> <span class="pl-k">public</span> <span class="pl-k">ref</span> <span class="pl-k">struct</span> <span class="pl-smi">FormatInterpolatedStringHandler</span> <span class="pl-kos">{</span> <span class="pl-k">public</span> <span class="pl-v">FormatInterpolatedStringHandler</span><span class="pl-kos">(</span><span class="pl-smi">int</span> <span class="pl-s1">literalLength</span><span class="pl-kos">,</span> <span class="pl-smi">int</span> <span class="pl-s1">formattedCount</span><span class="pl-kos">,</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span><span class="pl-kos">.</span><span class="pl-s1">Col</span> <span class="pl-s1">col</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-v">FormatInterpolatedStringHandler</span><span class="pl-kos">(</span><span class="pl-smi">int</span> <span class="pl-s1">literalLength</span><span class="pl-kos">,</span> <span class="pl-smi">int</span> <span class="pl-s1">formattedCount</span><span class="pl-kos">,</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span><span class="pl-kos">.</span><span class="pl-s1">Col</span> <span class="pl-s1">col</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IFormatProvider</span><span class="pl-c1">?</span> <span class="pl-s1">provider</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">AppendFormatted</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ReadOnlySpan</span><span class="pl-c1">&lt;</span><span class="pl-smi">char</span><span class="pl-c1">&gt;</span> <span class="pl-s1">value</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">AppendFormatted</span><span class="pl-kos">(</span><span class="pl-smi">string</span><span class="pl-c1">?</span> <span class="pl-s1">value</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">AppendFormatted</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ReadOnlySpan</span><span class="pl-c1">&lt;</span><span class="pl-smi">char</span><span class="pl-c1">&gt;</span> <span class="pl-s1">value</span><span class="pl-kos">,</span> <span class="pl-smi">int</span> <span class="pl-s1">alignment</span> <span class="pl-c1">=</span> <span class="pl-c1">0</span><span class="pl-kos">,</span> <span class="pl-smi">string</span><span class="pl-c1">?</span> <span class="pl-s1">format</span> <span class="pl-c1">=</span> <span class="pl-c1">null</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">AppendFormatted</span><span class="pl-kos">(</span><span class="pl-smi">object</span><span class="pl-c1">?</span> <span class="pl-s1">value</span><span class="pl-kos">,</span> <span class="pl-smi">int</span> <span class="pl-s1">alignment</span> <span class="pl-c1">=</span> <span class="pl-c1">0</span><span class="pl-kos">,</span> <span class="pl-smi">string</span><span class="pl-c1">?</span> <span class="pl-s1">format</span> <span class="pl-c1">=</span> <span class="pl-c1">null</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">AppendFormatted</span><span class="pl-kos">(</span><span class="pl-smi">string</span><span class="pl-c1">?</span> <span class="pl-s1">value</span><span class="pl-kos">,</span> <span class="pl-smi">int</span> <span class="pl-s1">alignment</span> <span class="pl-c1">=</span> <span class="pl-c1">0</span><span class="pl-kos">,</span> <span class="pl-smi">string</span><span class="pl-c1">?</span> <span class="pl-s1">format</span> <span class="pl-c1">=</span> <span class="pl-c1">null</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">AppendFormatted</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-smi">T</span> <span class="pl-s1">value</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">AppendFormatted</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-smi">T</span> <span class="pl-s1">value</span><span class="pl-kos">,</span> <span class="pl-smi">int</span> <span class="pl-s1">alignment</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">AppendFormatted</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-smi">T</span> <span class="pl-s1">value</span><span class="pl-kos">,</span> <span class="pl-smi">string</span><span class="pl-c1">?</span> <span class="pl-s1">format</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">AppendFormatted</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-smi">T</span> <span class="pl-s1">value</span><span class="pl-kos">,</span> <span class="pl-smi">int</span> <span class="pl-s1">alignment</span><span class="pl-kos">,</span> <span class="pl-smi">string</span><span class="pl-c1">?</span> <span class="pl-s1">format</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">AppendLiteral</span><span class="pl-kos">(</span><span class="pl-smi">string</span> <span class="pl-s1">value</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k">readonly</span> <span class="pl-k">ref</span> <span class="pl-k">struct</span> <span class="pl-smi">Cols</span> <span class="pl-kos">{</span> <span class="pl-k">public</span> <span class="pl-smi">int</span> <span class="pl-s1">Count</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span><span class="pl-kos">.</span><span class="pl-s1">Col</span> <span class="pl-k">this</span><span class="pl-kos">[</span><span class="pl-smi">int</span> <span class="pl-s1">colIndex</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Format</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">Generic</span><span class="pl-kos">.</span><span class="pl-smi">IReadOnlyList</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-s1">values</span><span class="pl-kos">)</span> <span class="pl-k">where</span> <span class="pl-c1">T</span> <span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">ISpanFormattable</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Format</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Runtime</span><span class="pl-kos">.</span><span class="pl-s1">CompilerServices</span><span class="pl-kos">.</span><span class="pl-s1">ParamCollection</span><span class="pl-kos">]</span> <span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Runtime</span><span class="pl-kos">.</span><span class="pl-s1">CompilerServices</span><span class="pl-kos">.</span><span class="pl-s1">ScopedRef</span><span class="pl-kos">]</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ReadOnlySpan</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-s1">values</span><span class="pl-kos">)</span> <span class="pl-k">where</span> <span class="pl-c1">T</span> <span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">ISpanFormattable</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Format</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">Span</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-s1">values</span><span class="pl-kos">)</span> <span class="pl-k">where</span> <span class="pl-c1">T</span> <span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">ISpanFormattable</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Format</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-smi">T</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-s1">values</span><span class="pl-kos">)</span> <span class="pl-k">where</span> <span class="pl-c1">T</span> <span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">ISpanFormattable</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Format</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ReadOnlySpan</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-s1">values</span><span class="pl-kos">,</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span><span class="pl-kos">.</span><span class="pl-smi">ColAction</span><span class="pl-c1">&lt;</span><span class="pl-smi">T</span><span class="pl-c1">&gt;</span> <span class="pl-s1">format</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Set</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">Generic</span><span class="pl-kos">.</span><span class="pl-smi">IReadOnlyList</span><span class="pl-c1">&lt;</span><span class="pl-smi">string</span><span class="pl-c1">&gt;</span> <span class="pl-s1">values</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Set</span><span class="pl-kos">(</span><span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Runtime</span><span class="pl-kos">.</span><span class="pl-s1">CompilerServices</span><span class="pl-kos">.</span><span class="pl-s1">ParamCollection</span><span class="pl-kos">]</span> <span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Runtime</span><span class="pl-kos">.</span><span class="pl-s1">CompilerServices</span><span class="pl-kos">.</span><span class="pl-s1">ScopedRef</span><span class="pl-kos">]</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ReadOnlySpan</span><span class="pl-c1">&lt;</span><span class="pl-smi">string</span><span class="pl-c1">&gt;</span> <span class="pl-s1">values</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Set</span><span class="pl-kos">(</span><span class="pl-smi">string</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-s1">values</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Set</span><span class="pl-kos">(</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepReader</span><span class="pl-kos">.</span><span class="pl-s1">Cols</span> <span class="pl-s1">cols</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k">ref</span> <span class="pl-k">struct</span> <span class="pl-smi">Row</span> <span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IAsyncDisposable</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IDisposable</span> <span class="pl-kos">{</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span><span class="pl-kos">.</span><span class="pl-s1">Col</span> <span class="pl-k">this</span><span class="pl-kos">[</span><span class="pl-smi">int</span> <span class="pl-s1">colIndex</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span><span class="pl-kos">.</span><span class="pl-s1">Col</span> <span class="pl-k">this</span><span class="pl-kos">[</span><span class="pl-smi">string</span> <span class="pl-s1">colName</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span><span class="pl-kos">.</span><span class="pl-s1">Cols</span> <span class="pl-k">this</span><span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ReadOnlySpan</span><span class="pl-c1">&lt;</span><span class="pl-smi">int</span><span class="pl-c1">&gt;</span> <span class="pl-s1">indices</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span><span class="pl-kos">.</span><span class="pl-s1">Cols</span> <span class="pl-k">this</span><span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ReadOnlySpan</span><span class="pl-c1">&lt;</span><span class="pl-smi">string</span><span class="pl-c1">&gt;</span> <span class="pl-s1">colNames</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span><span class="pl-kos">.</span><span class="pl-s1">Cols</span> <span class="pl-k">this</span><span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">Generic</span><span class="pl-kos">.</span><span class="pl-smi">IReadOnlyList</span><span class="pl-c1">&lt;</span><span class="pl-smi">string</span><span class="pl-c1">&gt;</span> <span class="pl-s1">colNames</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span><span class="pl-kos">.</span><span class="pl-s1">Cols</span> <span class="pl-k">this</span><span class="pl-kos">[</span><span class="pl-smi">string</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-s1">colNames</span><span class="pl-kos">]</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Dispose</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">Tasks</span><span class="pl-kos">.</span><span class="pl-s1">ValueTask</span> <span class="pl-en">DisposeAsync</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k">delegate</span> <span class="pl-smi">void</span> <span class="pl-s1">ColAction</span><span class="pl-kos">(</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span><span class="pl-kos">.</span><span class="pl-s1">Col</span> <span class="pl-s1">col</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">public</span> <span class="pl-k">delegate</span> <span class="pl-smi">void</span> <span class="pl-s1">ColAction</span><span class="pl-c1">&lt;</span><span class="pl-c1">T</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span><span class="pl-kos">.</span><span class="pl-s1">Col</span> <span class="pl-s1">col</span><span class="pl-kos">,</span> <span class="pl-smi">T</span> <span class="pl-s1">value</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-k">public</span> <span class="pl-k">delegate</span> <span class="pl-smi">void</span> <span class="pl-s1">RowAction</span><span class="pl-kos">(</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span><span class="pl-kos">.</span><span class="pl-s1">Row</span> <span class="pl-s1">row</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-k">class</span> <span class="pl-smi">SepWriterExtensions</span> <span class="pl-kos">{</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span> <span class="pl-en">To</span><span class="pl-kos">(</span><span class="pl-k">in</span> <span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterOptions</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IO</span><span class="pl-kos">.</span><span class="pl-s1">Stream</span> <span class="pl-s1">stream</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span> <span class="pl-en">To</span><span class="pl-kos">(</span><span class="pl-k">in</span> <span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterOptions</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IO</span><span class="pl-kos">.</span><span class="pl-s1">TextWriter</span> <span class="pl-s1">writer</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span> <span class="pl-en">To</span><span class="pl-kos">(</span><span class="pl-k">in</span> <span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterOptions</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Text</span><span class="pl-kos">.</span><span class="pl-s1">StringBuilder</span> <span class="pl-s1">stringBuilder</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span> <span class="pl-en">To</span><span class="pl-kos">(</span><span class="pl-k">in</span> <span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterOptions</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IO</span><span class="pl-kos">.</span><span class="pl-s1">Stream</span> <span class="pl-s1">stream</span><span class="pl-kos">,</span> <span class="pl-smi">bool</span> <span class="pl-s1">leaveOpen</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span> <span class="pl-en">To</span><span class="pl-kos">(</span><span class="pl-k">in</span> <span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterOptions</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IO</span><span class="pl-kos">.</span><span class="pl-s1">TextWriter</span> <span class="pl-s1">writer</span><span class="pl-kos">,</span> <span class="pl-smi">bool</span> <span class="pl-s1">leaveOpen</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span> <span class="pl-en">To</span><span class="pl-kos">(</span><span class="pl-k">in</span> <span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterOptions</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-smi">string</span> <span class="pl-s1">name</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">Func</span><span class="pl-c1">&lt;</span><span class="pl-smi">string</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IO</span><span class="pl-kos">.</span><span class="pl-s1">Stream</span><span class="pl-c1">&gt;</span> <span class="pl-s1">nameToStream</span><span class="pl-kos">,</span> <span class="pl-smi">bool</span> <span class="pl-s1">leaveOpen</span> <span class="pl-c1">=</span> <span class="pl-c1">false</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span> <span class="pl-en">To</span><span class="pl-kos">(</span><span class="pl-k">in</span> <span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterOptions</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-smi">string</span> <span class="pl-s1">name</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">Func</span><span class="pl-c1">&lt;</span><span class="pl-smi">string</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">IO</span><span class="pl-kos">.</span><span class="pl-s1">TextWriter</span><span class="pl-c1">&gt;</span> <span class="pl-s1">nameToWriter</span><span class="pl-kos">,</span> <span class="pl-smi">bool</span> <span class="pl-s1">leaveOpen</span> <span class="pl-c1">=</span> <span class="pl-c1">false</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span> <span class="pl-en">ToFile</span><span class="pl-kos">(</span><span class="pl-k">in</span> <span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterOptions</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-smi">string</span> <span class="pl-s1">filePath</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span> <span class="pl-en">ToText</span><span class="pl-kos">(</span><span class="pl-k">in</span> <span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterOptions</span> <span class="pl-s1">options</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriter</span> <span class="pl-en">ToText</span><span class="pl-kos">(</span><span class="pl-k">in</span> <span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterOptions</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-smi">int</span> <span class="pl-s1">capacity</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterOptions</span> <span class="pl-en">Writer</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">Sep</span> <span class="pl-s1">sep</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterOptions</span> <span class="pl-en">Writer</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepSpec</span> <span class="pl-s1">spec</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterOptions</span> <span class="pl-en">Writer</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">Sep</span> <span class="pl-s1">sep</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">Func</span><span class="pl-c1">&lt;</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterOptions</span><span class="pl-kos">,</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterOptions</span><span class="pl-c1">&gt;</span> <span class="pl-s1">configure</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterOptions</span> <span class="pl-en">Writer</span><span class="pl-kos">(</span><span class="pl-k">this</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepSpec</span> <span class="pl-s1">spec</span><span class="pl-kos">,</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">Func</span><span class="pl-c1">&lt;</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterOptions</span><span class="pl-kos">,</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterOptions</span><span class="pl-c1">&gt;</span> <span class="pl-s1">configure</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span> <span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Diagnostics</span><span class="pl-kos">.</span><span class="pl-s1">DebuggerDisplay</span><span class="pl-kos">(</span><span class="pl-s">"{DebuggerDisplay,nq}"</span><span class="pl-kos">)</span><span class="pl-kos">]</span> <span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Diagnostics</span><span class="pl-kos">.</span><span class="pl-s1">DebuggerTypeProxy</span><span class="pl-kos">(</span><span class="pl-k">typeof</span><span class="pl-kos">(</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterHeader</span><span class="pl-kos">.</span><span class="pl-s1">DebugView</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">]</span> <span class="pl-k">public</span> <span class="pl-k">sealed</span> <span class="pl-k">class</span> <span class="pl-smi">SepWriterHeader</span> <span class="pl-kos">{</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Add</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Collections</span><span class="pl-kos">.</span><span class="pl-s1">Generic</span><span class="pl-kos">.</span><span class="pl-smi">IReadOnlyList</span><span class="pl-c1">&lt;</span><span class="pl-smi">string</span><span class="pl-c1">&gt;</span> <span class="pl-s1">colNames</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Add</span><span class="pl-kos">(</span><span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Runtime</span><span class="pl-kos">.</span><span class="pl-s1">CompilerServices</span><span class="pl-kos">.</span><span class="pl-s1">ParamCollection</span><span class="pl-kos">]</span> <span class="pl-kos">[</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Runtime</span><span class="pl-kos">.</span><span class="pl-s1">CompilerServices</span><span class="pl-kos">.</span><span class="pl-s1">ScopedRef</span><span class="pl-kos">]</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">ReadOnlySpan</span><span class="pl-c1">&lt;</span><span class="pl-smi">string</span><span class="pl-c1">&gt;</span> <span class="pl-s1">colNames</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Add</span><span class="pl-kos">(</span><span class="pl-smi">string</span> <span class="pl-s1">colName</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Add</span><span class="pl-kos">(</span><span class="pl-smi">string</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-s1">colNames</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">Write</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">Tasks</span><span class="pl-kos">.</span><span class="pl-s1">ValueTask</span> <span class="pl-en">WriteAsync</span><span class="pl-kos">(</span><span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Threading</span><span class="pl-kos">.</span><span class="pl-s1">CancellationToken</span> <span class="pl-s1">cancellationToken</span> <span class="pl-c1">=</span> <span class="pl-k">default</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-k">readonly</span> <span class="pl-k">struct</span> <span class="pl-smi">SepWriterOptions</span> <span class="pl-c1">:</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-smi">IEquatable</span><span class="pl-c1">&lt;</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepWriterOptions</span><span class="pl-c1">&gt;</span> <span class="pl-kos">{</span> <span class="pl-k">public</span> <span class="pl-v">SepWriterOptions</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-v">SepWriterOptions</span><span class="pl-kos">(</span><span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">Sep</span> <span class="pl-s1">sep</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">AsyncContinueOnCapturedContext</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">SepColNotSetOption</span> <span class="pl-s1">ColNotSetOption</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">System</span><span class="pl-kos">.</span><span class="pl-s1">Globalization</span><span class="pl-kos">.</span><span class="pl-s1">CultureInfo</span><span class="pl-c1">?</span> <span class="pl-s1">CultureInfo</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">DisableColCountCheck</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">Escape</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-s1">nietras</span><span class="pl-kos">.</span><span class="pl-s1">SeparatedValues</span><span class="pl-kos">.</span><span class="pl-s1">Sep</span> <span class="pl-s1">Sep</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-k">public</span> <span class="pl-smi">bool</span> <span class="pl-s1">WriteHeader</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">init</span><span class="pl-kos">;</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span></pre></div> </article></div></div></div></div></div> <!-- --> <!-- --> <script type="application/json" id="__PRIMER_DATA_:R0:__">{"resolvedServerColorMode":"day"}</script></div> </react-partial> <input type="hidden" data-csrf="true" value="07swaglS9S3ahJSoVtXB5bKmwbVZ2DUmae8WOG8iJJeiBCKDjkYzdEZmyE46gl3COHMOUFrVY074lrORoiEsuQ==" /> </div> <div data-view-component="true" class="Layout-sidebar"> <div class="BorderGrid about-margin" data-pjax> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <div class="hide-sm hide-md"> <h2 class="mb-3 h4">About</h2> <p class="f4 my-3"> World's Fastest .NET CSV Parser. Modern, minimal, fast, zero allocation, reading and writing of separated values (`csv`, `tsv` etc.). Cross-platform, trimmable and AOT/NativeAOT compatible. </p> <div class="my-3 d-flex flex-items-center"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link flex-shrink-0 mr-2"> <path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path> </svg> <span class="flex-auto min-width-0 css-truncate css-truncate-target width-fit"> <a title="http://nietras.com" role="link" target="_blank" rel="noopener noreferrer nofollow" class="text-bold" href="http://nietras.com">nietras.com</a> </span> </div> <h3 class="sr-only">Topics</h3> <div class="my-3"> <div class="f6"> <a href="/topics/performance" title="Topic: performance" data-view-component="true" class="topic-tag topic-tag-link"> performance </a> <a href="/topics/csv" title="Topic: csv" data-view-component="true" class="topic-tag topic-tag-link"> csv </a> <a href="/topics/csharp" title="Topic: csharp" data-view-component="true" class="topic-tag topic-tag-link"> csharp </a> <a href="/topics/dotnet" title="Topic: dotnet" data-view-component="true" class="topic-tag topic-tag-link"> dotnet </a> <a href="/topics/simd" title="Topic: simd" data-view-component="true" class="topic-tag topic-tag-link"> simd </a> <a href="/topics/csv-parser" title="Topic: csv-parser" data-view-component="true" class="topic-tag topic-tag-link"> csv-parser </a> <a href="/topics/csv-reader" title="Topic: csv-reader" data-view-component="true" class="topic-tag topic-tag-link"> csv-reader </a> <a href="/topics/csv-writer" title="Topic: csv-writer" data-view-component="true" class="topic-tag topic-tag-link"> csv-writer </a> </div> </div> <h3 class="sr-only">Resources</h3> <div class="mt-2"> <a class="Link--muted" data-analytics-event="{&quot;category&quot;:&quot;Repository Overview&quot;,&quot;action&quot;:&quot;click&quot;,&quot;label&quot;:&quot;location:sidebar;file:readme&quot;}" href="#readme-ov-file"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-book mr-2"> <path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path> </svg> Readme </a> </div> <h3 class="sr-only">License</h3> <div class="mt-2"> <a href="#MIT-1-ov-file" class="Link--muted" data-analytics-event="{&quot;category&quot;:&quot;Repository Overview&quot;,&quot;action&quot;:&quot;click&quot;,&quot;label&quot;:&quot;location:sidebar;file:license&quot;}" > <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-law mr-2"> <path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"></path> </svg> MIT license </a> </div> <h3 class="sr-only">Code of conduct</h3> <div class="mt-2"> <a href="#coc-ov-file" class="Link--muted" data-analytics-event="{&quot;category&quot;:&quot;Repository Overview&quot;,&quot;action&quot;:&quot;click&quot;,&quot;label&quot;:&quot;location:sidebar;file:code of conduct&quot;}" > <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-of-conduct mr-2"> <path d="M8.048 2.241c.964-.709 2.079-1.238 3.325-1.241a4.616 4.616 0 0 1 3.282 1.355c.41.408.757.86.996 1.428.238.568.348 1.206.347 1.968 0 2.193-1.505 4.254-3.081 5.862-1.496 1.526-3.213 2.796-4.249 3.563l-.22.163a.749.749 0 0 1-.895 0l-.221-.163c-1.036-.767-2.753-2.037-4.249-3.563C1.51 10.008.007 7.952.002 5.762a4.614 4.614 0 0 1 1.353-3.407C3.123.585 6.223.537 8.048 2.24Zm-1.153.983c-1.25-1.033-3.321-.967-4.48.191a3.115 3.115 0 0 0-.913 2.335c0 1.556 1.109 3.24 2.652 4.813C5.463 11.898 6.96 13.032 8 13.805c.353-.262.758-.565 1.191-.905l-1.326-1.223a.75.75 0 0 1 1.018-1.102l1.48 1.366c.328-.281.659-.577.984-.887L9.99 9.802a.75.75 0 1 1 1.019-1.103l1.384 1.28c.295-.329.566-.661.81-.995L12.92 8.7l-1.167-1.168c-.674-.671-1.78-.664-2.474.03-.268.269-.538.537-.802.797-.893.882-2.319.843-3.185-.032-.346-.35-.693-.697-1.043-1.047a.75.75 0 0 1-.04-1.016c.162-.191.336-.401.52-.623.62-.748 1.356-1.637 2.166-2.417Zm7.112 4.442c.313-.65.491-1.293.491-1.916v-.001c0-.614-.088-1.045-.23-1.385-.143-.339-.357-.633-.673-.949a3.111 3.111 0 0 0-2.218-.915c-1.092.003-2.165.627-3.226 1.602-.823.755-1.554 1.637-2.228 2.45l-.127.154.562.566a.755.755 0 0 0 1.066.02l.794-.79c1.258-1.258 3.312-1.31 4.594-.032.396.394.792.791 1.173 1.173Z"></path> </svg> Code of conduct </a> </div> <h3 class="sr-only">Security policy</h3> <div class="mt-2"> <a href="#security-ov-file" class="Link--muted" data-analytics-event="{&quot;category&quot;:&quot;Repository Overview&quot;,&quot;action&quot;:&quot;click&quot;,&quot;label&quot;:&quot;location:sidebar;file:security policy&quot;}" > <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-law mr-2"> <path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"></path> </svg> Security policy </a> </div> <include-fragment src="/nietras/Sep/hovercards/citation/sidebar_partial?tree_name=main"> </include-fragment> <div class="mt-2"> <a href="/nietras/Sep/activity" data-view-component="true" class="Link Link--muted"><svg text="gray" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pulse mr-2"> <path d="M6 2c.306 0 .582.187.696.471L10 10.731l1.304-3.26A.751.751 0 0 1 12 7h3.25a.75.75 0 0 1 0 1.5h-2.742l-1.812 4.528a.751.751 0 0 1-1.392 0L6 4.77 4.696 8.03A.75.75 0 0 1 4 8.5H.75a.75.75 0 0 1 0-1.5h2.742l1.812-4.529A.751.751 0 0 1 6 2Z"></path> </svg> <span class="color-fg-muted">Activity</span></a> </div> <h3 class="sr-only">Stars</h3> <div class="mt-2"> <a href="/nietras/Sep/stargazers" data-view-component="true" class="Link Link--muted"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star mr-2"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg> <strong>1.1k</strong> stars</a> </div> <h3 class="sr-only">Watchers</h3> <div class="mt-2"> <a href="/nietras/Sep/watchers" data-view-component="true" class="Link Link--muted"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-eye mr-2"> <path d="M8 2c1.981 0 3.671.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.62 1.62 0 0 1 0 1.798c-.45.678-1.367 1.932-2.637 3.023C11.67 13.008 9.981 14 8 14c-1.981 0-3.671-.992-4.933-2.078C1.797 10.83.88 9.576.43 8.898a1.62 1.62 0 0 1 0-1.798c.45-.677 1.367-1.931 2.637-3.022C4.33 2.992 6.019 2 8 2ZM1.679 7.932a.12.12 0 0 0 0 .136c.411.622 1.241 1.75 2.366 2.717C5.176 11.758 6.527 12.5 8 12.5c1.473 0 2.825-.742 3.955-1.715 1.124-.967 1.954-2.096 2.366-2.717a.12.12 0 0 0 0-.136c-.412-.621-1.242-1.75-2.366-2.717C10.824 4.242 9.473 3.5 8 3.5c-1.473 0-2.825.742-3.955 1.715-1.124.967-1.954 2.096-2.366 2.717ZM8 10a2 2 0 1 1-.001-3.999A2 2 0 0 1 8 10Z"></path> </svg> <strong>8</strong> watching</a> </div> <h3 class="sr-only">Forks</h3> <div class="mt-2"> <a href="/nietras/Sep/forks" data-view-component="true" class="Link Link--muted"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg> <strong>42</strong> forks</a> </div> <div class="mt-2"> <a class="Link--muted" href="/contact/report-content?content_url=https%3A%2F%2Fgithub.com%2Fnietras%2FSep&amp;report=nietras+%28user%29"> Report repository </a> </div> </div> </div> </div> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <h2 class="h4 mb-3" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame"> <a href="/nietras/Sep/releases" data-view-component="true" class="Link--primary no-underline Link">Releases <span title="29" data-view-component="true" class="Counter">29</span></a></h2> <a class="Link--primary d-flex no-underline" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/nietras/Sep/releases/tag/v0.9.0"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-tag flex-shrink-0 mt-1 color-fg-success"> <path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"></path> </svg> <div class="ml-2 min-width-0"> <div class="d-flex"> <span class="css-truncate css-truncate-target text-bold mr-2" style="max-width: none;">0.9.0 - Async Support</span> <span title="Label: Latest" data-view-component="true" class="Label Label--success flex-shrink-0"> Latest </span> </div> <div class="text-small color-fg-muted"><relative-time datetime="2025-02-01T15:15:39Z" class="no-wrap">Feb 1, 2025</relative-time></div> </div> </a> <div data-view-component="true" class="mt-3"> <a text="small" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/nietras/Sep/releases" data-view-component="true" class="Link">+ 28 releases</a></div> </div> </div> <div class="BorderGrid-row" hidden> <div class="BorderGrid-cell"> <include-fragment src="/nietras/Sep/used_by_list" accept="text/fragment+html"> </include-fragment> </div> </div> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <h2 class="h4 mb-3"> <a href="/nietras/Sep/graphs/contributors" data-view-component="true" class="Link--primary no-underline Link d-flex flex-items-center">Contributors <span title="3" data-view-component="true" class="Counter ml-1">3</span></a></h2> <ul class="list-style-none "> <li class="mb-2 d-flex" > <a href="https://github.com/nietras" class="mr-2" data-hovercard-type="user" data-hovercard-url="/users/nietras/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" > <img src="https://avatars.githubusercontent.com/u/10798831?s=64&amp;v=4" alt="@nietras" size="32" height="32" width="32" data-view-component="true" class="avatar circle" /> </a> <span data-view-component="true" class="flex-self-center min-width-0 css-truncate css-truncate-overflow width-fit flex-auto"> <a href="https://github.com/nietras" class="Link--primary no-underline flex-self-center"> <strong>nietras</strong> </a> </span> </li> <li class="mb-2 d-flex" > <a href="https://github.com/apps/dependabot" class="mr-2" > <img src="https://avatars.githubusercontent.com/in/29110?s=64&amp;v=4" alt="@dependabot[bot]" size="32" height="32" width="32" data-view-component="true" class="avatar" /> </a> <span data-view-component="true" class="flex-self-center min-width-0 css-truncate css-truncate-overflow width-fit flex-auto"> <a href="https://github.com/apps/dependabot" class="Link--primary no-underline flex-self-center"> <strong>dependabot[bot]</strong> </a> </span> </li> <li class="mb-2 d-flex" > <a href="https://github.com/step-security-bot" class="mr-2" data-hovercard-type="user" data-hovercard-url="/users/step-security-bot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" > <img src="https://avatars.githubusercontent.com/u/89328645?s=64&amp;v=4" alt="@step-security-bot" size="32" height="32" width="32" data-view-component="true" class="avatar circle" /> </a> <span data-view-component="true" class="flex-self-center min-width-0 css-truncate css-truncate-overflow width-fit flex-auto"> <a href="https://github.com/step-security-bot" class="Link--primary no-underline flex-self-center"> <strong>step-security-bot</strong> <span class="color-fg-muted">StepSecurity Bot</span> </a> </span> </li> </ul> </div> </div> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <h2 class="h4 mb-3">Languages</h2> <div class="mb-2"> <span data-view-component="true" class="Progress"> <span style="background-color:#178600 !important;;width: 99.7%;" itemprop="keywords" data-view-component="true" class="Progress-item color-bg-success-emphasis"></span> <span style="background-color:#ededed !important;;width: 0.3%;" itemprop="keywords" data-view-component="true" class="Progress-item color-bg-success-emphasis"></span> </span></div> <ul class="list-style-none"> <li class="d-inline"> <a class="d-inline-flex flex-items-center flex-nowrap Link--secondary no-underline text-small mr-3" href="/nietras/Sep/search?l=c%23" data-ga-click="Repository, language stats search click, location:repo overview"> <svg style="color:#178600;" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill mr-2"> <path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path> </svg> <span class="color-fg-default text-bold mr-1">C#</span> <span>99.7%</span> </a> </li> <li class="d-inline"> <span class="d-inline-flex flex-items-center flex-nowrap text-small mr-3"> <svg style="color:#ededed;" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill mr-2"> <path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path> </svg> <span class="color-fg-default text-bold mr-1">Other</span> <span>0.3%</span> </span> </li> </ul> </div> </div> </div> </div> </div></div> </div> </div> </turbo-frame> </main> </div> </div> <footer class="footer pt-8 pb-6 f6 color-fg-muted p-responsive" role="contentinfo" > <h2 class='sr-only'>Footer</h2> <div class="d-flex flex-justify-center flex-items-center flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap"> <div class="d-flex flex-items-center flex-shrink-0 mx-2"> <a aria-label="Homepage" title="GitHub" class="footer-octicon mr-2" href="https://github.com"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github"> <path d="M12 1C5.9225 1 1 5.9225 1 12C1 16.8675 4.14875 20.9787 8.52125 22.4362C9.07125 22.5325 9.2775 22.2025 9.2775 21.9137C9.2775 21.6525 9.26375 20.7862 9.26375 19.865C6.5 20.3737 5.785 19.1912 5.565 18.5725C5.44125 18.2562 4.905 17.28 4.4375 17.0187C4.0525 16.8125 3.5025 16.3037 4.42375 16.29C5.29 16.2762 5.90875 17.0875 6.115 17.4175C7.105 19.0812 8.68625 18.6137 9.31875 18.325C9.415 17.61 9.70375 17.1287 10.02 16.8537C7.5725 16.5787 5.015 15.63 5.015 11.4225C5.015 10.2262 5.44125 9.23625 6.1425 8.46625C6.0325 8.19125 5.6475 7.06375 6.2525 5.55125C6.2525 5.55125 7.17375 5.2625 9.2775 6.67875C10.1575 6.43125 11.0925 6.3075 12.0275 6.3075C12.9625 6.3075 13.8975 6.43125 14.7775 6.67875C16.8813 5.24875 17.8025 5.55125 17.8025 5.55125C18.4075 7.06375 18.0225 8.19125 17.9125 8.46625C18.6138 9.23625 19.04 10.2125 19.04 11.4225C19.04 15.6437 16.4688 16.5787 14.0213 16.8537C14.42 17.1975 14.7638 17.8575 14.7638 18.8887C14.7638 20.36 14.75 21.5425 14.75 21.9137C14.75 22.2025 14.9563 22.5462 15.5063 22.4362C19.8513 20.9787 23 16.8537 23 12C23 5.9225 18.0775 1 12 1Z"></path> </svg> </a> <span> &copy; 2025 GitHub,&nbsp;Inc. </span> </div> <nav aria-label="Footer"> <h3 class="sr-only" id="sr-footer-heading">Footer navigation</h3> <ul class="list-style-none d-flex flex-justify-center flex-wrap mb-2 mb-lg-0" aria-labelledby="sr-footer-heading"> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to Terms&quot;,&quot;label&quot;:&quot;text:terms&quot;}" href="https://docs.github.com/site-policy/github-terms/github-terms-of-service" data-view-component="true" class="Link--secondary Link">Terms</a> </li> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to privacy&quot;,&quot;label&quot;:&quot;text:privacy&quot;}" href="https://docs.github.com/site-policy/privacy-policies/github-privacy-statement" data-view-component="true" class="Link--secondary Link">Privacy</a> </li> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to security&quot;,&quot;label&quot;:&quot;text:security&quot;}" href="https://github.com/security" data-view-component="true" class="Link--secondary Link">Security</a> </li> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to status&quot;,&quot;label&quot;:&quot;text:status&quot;}" href="https://www.githubstatus.com/" data-view-component="true" class="Link--secondary Link">Status</a> </li> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to docs&quot;,&quot;label&quot;:&quot;text:docs&quot;}" href="https://docs.github.com/" data-view-component="true" class="Link--secondary Link">Docs</a> </li> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to contact&quot;,&quot;label&quot;:&quot;text:contact&quot;}" href="https://support.github.com?tags=dotcom-footer" data-view-component="true" class="Link--secondary Link">Contact</a> </li> <li class="mx-2" > <cookie-consent-link> <button type="button" class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent" data-action="click:cookie-consent-link#showConsentManagement" data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;cookies&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;cookies_link_subfooter_footer&quot;}" > Manage cookies </button> </cookie-consent-link> </li> <li class="mx-2"> <cookie-consent-link> <button type="button" class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent" data-action="click:cookie-consent-link#showConsentManagement" data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;dont_share_info&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;dont_share_info_link_subfooter_footer&quot;}" > Do not share my personal information </button> </cookie-consent-link> </li> </ul> </nav> </div> </footer> <ghcc-consent id="ghcc" class="position-fixed bottom-0 left-0" style="z-index: 999999" data-initial-cookie-consent-allowed="" data-cookie-consent-required="false"></ghcc-consent> <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> You can’t perform that action at this time. </div> <template id="site-details-dialog"> <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open> <summary role="button" aria-label="Close dialog"></summary> <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal"> <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> <div class="octocat-spinner my-6 js-details-dialog-spinner"></div> </details-dialog> </details> </template> <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;"> <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;"> </div> </div> <template id="snippet-clipboard-copy-button"> <div class="zeroclipboard-container position-absolute right-0 top-0"> <clipboard-copy aria-label="Copy" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2"> <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </clipboard-copy> </div> </template> <template id="snippet-clipboard-copy-button-unpositioned"> <div class="zeroclipboard-container"> <clipboard-copy aria-label="Copy" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon"> <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </clipboard-copy> </div> </template> </div> <div id="js-global-screen-reader-notice" class="sr-only mt-n1" aria-live="polite" aria-atomic="true" ></div> <div id="js-global-screen-reader-notice-assertive" class="sr-only mt-n1" aria-live="assertive" aria-atomic="true"></div> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10