Skip to content

Commit b910bbf

Browse files
feat: init
0 parents  commit b910bbf

File tree

10 files changed

+616
-0
lines changed

10 files changed

+616
-0
lines changed

.gitignore

Lines changed: 243 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,243 @@
1+
## Ignore Visual Studio temporary files, build results, and
2+
## files generated by popular Visual Studio add-ons.
3+
4+
# User-specific files
5+
*.suo
6+
*.user
7+
*.userosscache
8+
*.sln.docstates
9+
10+
# User-specific files (MonoDevelop/Xamarin Studio)
11+
*.userprefs
12+
13+
# Build results
14+
[Dd]ebug/
15+
[Dd]ebugPublic/
16+
[Rr]elease/
17+
[Rr]eleases/
18+
[Xx]64/
19+
[Xx]86/
20+
[Bb]uild/
21+
bld/
22+
[Bb]in/
23+
[Oo]bj/
24+
25+
# Visual Studio 2015 cache/options directory
26+
.vs/
27+
# Uncomment if you have tasks that create the project's static files in wwwroot
28+
#wwwroot/
29+
30+
# MSTest test Results
31+
[Tt]est[Rr]esult*/
32+
[Bb]uild[Ll]og.*
33+
34+
# NUNIT
35+
*.VisualState.xml
36+
TestResult.xml
37+
38+
# Build Results of an ATL Project
39+
[Dd]ebugPS/
40+
[Rr]eleasePS/
41+
dlldata.c
42+
43+
# DNX
44+
project.lock.json
45+
artifacts/
46+
47+
*_i.c
48+
*_p.c
49+
*_i.h
50+
*.ilk
51+
*.meta
52+
*.obj
53+
*.pch
54+
*.pdb
55+
*.pgc
56+
*.pgd
57+
*.rsp
58+
*.sbr
59+
*.tlb
60+
*.tli
61+
*.tlh
62+
*.tmp
63+
*.tmp_proj
64+
*.log
65+
*.vspscc
66+
*.vssscc
67+
.builds
68+
*.pidb
69+
*.svclog
70+
*.scc
71+
72+
# Chutzpah Test files
73+
_Chutzpah*
74+
75+
# Visual C++ cache files
76+
ipch/
77+
*.aps
78+
*.ncb
79+
*.opendb
80+
*.opensdf
81+
*.sdf
82+
*.cachefile
83+
*.VC.db
84+
85+
# Visual Studio profiler
86+
*.psess
87+
*.vsp
88+
*.vspx
89+
*.sap
90+
91+
# TFS 2012 Local Workspace
92+
$tf/
93+
94+
# Guidance Automation Toolkit
95+
*.gpState
96+
97+
# ReSharper is a .NET coding add-in
98+
_ReSharper*/
99+
*.[Rr]e[Ss]harper
100+
*.DotSettings.user
101+
102+
# JustCode is a .NET coding add-in
103+
.JustCode
104+
105+
# TeamCity is a build add-in
106+
_TeamCity*
107+
108+
# DotCover is a Code Coverage Tool
109+
*.dotCover
110+
111+
# NCrunch
112+
_NCrunch_*
113+
.*crunch*.local.xml
114+
nCrunchTemp_*
115+
116+
# MightyMoose
117+
*.mm.*
118+
AutoTest.Net/
119+
120+
# Web workbench (sass)
121+
.sass-cache/
122+
123+
# Installshield output folder
124+
[Ee]xpress/
125+
126+
# DocProject is a documentation generator add-in
127+
DocProject/buildhelp/
128+
DocProject/Help/*.HxT
129+
DocProject/Help/*.HxC
130+
DocProject/Help/*.hhc
131+
DocProject/Help/*.hhk
132+
DocProject/Help/*.hhp
133+
DocProject/Help/Html2
134+
DocProject/Help/html
135+
136+
# Click-Once directory
137+
publish/
138+
139+
# Publish Web Output
140+
*.[Pp]ublish.xml
141+
*.azurePubxml
142+
143+
# TODO: Un-comment the next line if you do not want to checkin
144+
# your web deploy settings because they may include unencrypted
145+
# passwords
146+
#*.pubxml
147+
*.publishproj
148+
149+
# NuGet Packages
150+
*.nupkg
151+
# The packages folder can be ignored because of Package Restore
152+
**/packages/*
153+
# except build/, which is used as an MSBuild target.
154+
!**/packages/build/
155+
# Uncomment if necessary however generally it will be regenerated when needed
156+
#!**/packages/repositories.config
157+
# NuGet v3's project.json files produces more ignoreable files
158+
*.nuget.props
159+
*.nuget.targets
160+
161+
# Microsoft Azure Build Output
162+
csx/
163+
*.build.csdef
164+
165+
# Microsoft Azure Emulator
166+
ecf/
167+
rcf/
168+
169+
# Windows Store app package directory
170+
AppPackages/
171+
BundleArtifacts/
172+
173+
# Visual Studio cache files
174+
# files ending in .cache can be ignored
175+
*.[Cc]ache
176+
# but keep track of directories ending in .cache
177+
!*.[Cc]ache/
178+
179+
# Others
180+
ClientBin/
181+
[Ss]tyle[Cc]op.*
182+
~$*
183+
*~
184+
*.dbmdl
185+
*.dbproj.schemaview
186+
*.pfx
187+
*.publishsettings
188+
node_modules/
189+
orleans.codegen.cs
190+
191+
# RIA/Silverlight projects
192+
Generated_Code/
193+
194+
# Backup & report files from converting an old project file
195+
# to a newer Visual Studio version. Backup files are not needed,
196+
# because we have git ;-)
197+
_UpgradeReport_Files/
198+
Backup*/
199+
UpgradeLog*.XML
200+
UpgradeLog*.htm
201+
202+
# SQL Server files
203+
*.mdf
204+
*.ldf
205+
206+
# Business Intelligence projects
207+
*.rdl.data
208+
*.bim.layout
209+
*.bim_*.settings
210+
211+
# Microsoft Fakes
212+
FakesAssemblies/
213+
214+
# GhostDoc plugin setting file
215+
*.GhostDoc.xml
216+
217+
# Node.js Tools for Visual Studio
218+
.ntvs_analysis.dat
219+
220+
# Visual Studio 6 build log
221+
*.plg
222+
223+
# Visual Studio 6 workspace options file
224+
*.opt
225+
226+
# Visual Studio LightSwitch build output
227+
**/*.HTMLClient/GeneratedArtifacts
228+
**/*.DesktopClient/GeneratedArtifacts
229+
**/*.DesktopClient/ModelManifest.xml
230+
**/*.Server/GeneratedArtifacts
231+
**/*.Server/ModelManifest.xml
232+
_Pvt_Extensions
233+
234+
# LightSwitch generated files
235+
GeneratedArtifacts/
236+
ModelManifest.xml
237+
238+
# Paket dependency manager
239+
.paket/paket.exe
240+
241+
# FAKE - F# Make
242+
.fake/
243+
*.msi

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2022-2023 Brevnov Vyacheslav Sergeevich
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
<h1 align="center">
2+
<a>StringBuilderArray</a>
3+
</h1>
4+
5+
<h3 align="center">
6+
7+
[![Nuget](https://img.shields.io/nuget/v/Gedaq.Npgsql?logo=StringBuilderArray)](https://www.nuget.org/packages/StringBuilderArray/)
8+
[![Downloads](https://img.shields.io/nuget/dt/StringBuilderArray.svg)](https://www.nuget.org/packages/StringBuilderArray/)
9+
[![Stars](https://img.shields.io/github/stars/SoftStoneDevelop/StringBuilderArray?color=brightgreen)](https://github.com/SoftStoneDevelop/StringBuilderArray/stargazers)
10+
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
11+
12+
</h3>
13+
14+
The version of StringBuilder built on an array of strings string[]: uses less memory.
15+
16+
Benchmark:
17+
18+
```C#
19+
20+
[IterationSetup]
21+
public void Setup()
22+
{
23+
_str = new string('S', StrLength);
24+
}
25+
26+
[Benchmark(Baseline = true, Description = "StringBuilder")]
27+
public void StringBuilder()
28+
{
29+
var sb = new System.Text.StringBuilder();
30+
for (int i = 0; i < 1000; i++)
31+
{
32+
sb.AppendLine(_str);
33+
}
34+
35+
var result = sb.ToString();
36+
}
37+
38+
[Benchmark(Description = "StringBuilderArray")]
39+
public void StringBuilderArray()
40+
{
41+
var sb = new StringBuilderArray.StringBuilderArray();
42+
for (int i = 0; i < 1000; i++)
43+
{
44+
sb.AppendLine(_str);
45+
}
46+
47+
var result = sb.ToString();
48+
}
49+
50+
```
51+
52+
| Method | StrLength | Mean | Ratio | Gen0 | Gen1 | Gen2 | Allocated | Alloc Ratio |
53+
|------------------- |---------- |--------------:|------:|----------:|----------:|----------:|--------------:|------------:|
54+
| **StringBuilder** | **5** | **18.40 μs** | **1.00** | **-** | **-** | **-** | **30.98 KB** | **1.00** |
55+
| StringBuilderArray | 5 | 33.35 μs | 1.83 | - | - | - | 34.7 KB | 1.12 |
56+
| | | | | | | | | |
57+
| **StringBuilder** | **7** | **16.46 μs** | **1.00** | **-** | **-** | **-** | **50.59 KB** | **1.00** |
58+
| StringBuilderArray | 7 | 32.61 μs | 2.02 | - | - | - | 38.61 KB | 0.76 |
59+
| | | | | | | | | |
60+
| **StringBuilder** | **10** | **17.37 μs** | **1.00** | **-** | **-** | **-** | **56.45 KB** | **1.00** |
61+
| StringBuilderArray | 10 | 33.83 μs | 1.98 | - | - | - | 44.47 KB | 0.79 |
62+
| | | | | | | | | |
63+
| **StringBuilder** | **50** | **22.60 μs** | **1.00** | **-** | **-** | **-** | **206.36 KB** | **1.00** |
64+
| StringBuilderArray | 50 | 35.55 μs | 1.61 | - | - | - | 122.59 KB | 0.59 |
65+
| | | | | | | | | |
66+
| **StringBuilder** | **100** | **28.69 μs** | **1.00** | **-** | **-** | **-** | **413.8 KB** | **1.00** |
67+
| StringBuilderArray | 100 | 42.39 μs | 1.49 | - | - | - | 220.25 KB | 0.53 |
68+
| | | | | | | | | |
69+
| **StringBuilder** | **1000** | **655.56 μs** | **1.00** | **-** | **-** | **-** | **3935.53 KB** | **1.00** |
70+
| StringBuilderArray | 1000 | 572.79 μs | 0.90 | - | - | - | 1978.06 KB | 0.50 |
71+
| | | | | | | | | |
72+
| **StringBuilder** | **2500** | **1,937.56 μs** | **1.00** | **-** | **-** | **-** | **9804.08 KB** | **1.00** |
73+
| StringBuilderArray | 2500 | 1,344.46 μs | 0.70 | - | - | - | 4907.75 KB | 0.50 |
74+
| | | | | | | | | |
75+
| **StringBuilder** | **5000** | **4,863.25 μs** | **1.00** | **1000.0000** | **-** | **-** | **19583.76 KB** | **1.00** |
76+
| StringBuilderArray | 5000 | 2,893.15 μs | 0.60 | - | - | - | 9790.56 KB | 0.50 |
77+
| | | | | | | | | |
78+
| **StringBuilder** | **10000** | **10,066.64 μs** | **1.00** | **2000.0000** | **1000.0000** | **-** | **39162.77 KB** | **1.00** |
79+
| StringBuilderArray | 10000 | 5,164.62 μs | 0.52 | - | - | - | 19556.19 KB | 0.50 |
80+
| | | | | | | | | |
81+
| **StringBuilder** | **100000** | **54,942.42 μs** | **1.00** | **4000.0000** | **4000.0000** | **3000.0000** | **390802.44 KB** | **1.00** |
82+
| StringBuilderArray | 100000 | 20,573.11 μs | 0.37 | - | - | - | 195337.44 KB | 0.50 |
83+
| | | | | | | | | |
84+
| **StringBuilder** | **500000** | **212,154.11 μs** | **1.00** | **5000.0000** | **4000.0000** | **4000.0000** | **1953310.77 KB** | **1.00** |
85+
| StringBuilderArray | 500000 | 105,018.88 μs | 0.49 | - | - | - | 976587.44 KB | 0.50 |
86+
| | | | | | | | | |
87+
| **StringBuilder** | **1071741** | **288,174.29 μs** | **1.00** | **5000.0000** | **4000.0000** | **4000.0000** | **4186664.2 KB** | **1.00** |
88+
| StringBuilderArray | 1071741 | 153,042.51 μs | 0.53 | - | - | - | 2093269.08 KB | 0.50 |

Src/Benchmark/Benchmark.csproj

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
<PropertyGroup>
3+
<OutputType>Exe</OutputType>
4+
<TargetFramework>net7.0</TargetFramework>
5+
</PropertyGroup>
6+
<ItemGroup>
7+
<PackageReference Include="BenchmarkDotNet" Version="0.13.6" />
8+
</ItemGroup>
9+
<ItemGroup>
10+
<ProjectReference Include="..\StringBuilderArray\StringBuilderArray.csproj" />
11+
</ItemGroup>
12+
</Project>

0 commit comments

Comments
 (0)