Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wotakuro/StringBuilderTemporary
C# string operation utility
https://github.com/wotakuro/StringBuilderTemporary
Last synced: about 2 months ago
JSON representation
C# string operation utility
- Host: GitHub
- URL: https://github.com/wotakuro/StringBuilderTemporary
- Owner: wotakuro
- License: mit
- Created: 2016-03-28T17:20:07.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2016-09-14T11:18:47.000Z (over 8 years ago)
- Last Synced: 2024-08-03T19:09:57.891Z (5 months ago)
- Language: C#
- Homepage:
- Size: 39.1 KB
- Stars: 37
- Watchers: 5
- Forks: 8
- Open Issues: 4
-
Metadata Files:
- Readme: README.ja.md
- License: LICENSE
Awesome Lists containing this project
- awesome-unity-open-source-on-github - StringBuilderTemporary - C# string operation utility (Optimization)
README
# StringBuilderTemporary
Read this in other languages: [English](README.md), 日本語
C#では、string同士の足し算だと temporaryでメモリを大量に確保されるため、
System.Text.StringBufferの使用する方がパフォーマンス的にもメモリ的にも良いです。ですが、既に出来上がってしまったものをイチイチ対応するのはとても大変です。
そこで、処理をまともにするコードを簡単に書けるためのクラスを今回用意しましたまず、利用するコードのトップで下記宣言をします。
------
using StrOpe = StringOperationUtil.OptimizedStringOperation;
------そして、実際のソースを
----
string str = "aaa" + 20 + "bbbb";
↓
string str = StrOpe.i + "aaa" + 20 + "bbbb";
----
とすることで、処理が大分まともになります。(内部的にはStringBuilderを利用します。
operatorで + 演算子の上書き、暗黙的castを書くことで処理向上を行っております)StrOpe.iは、同じオブジェクトを使いまわしますが、
そういうケースで使いたい場合は、StrOpe.Create()を代わりに使用してください。# Stringでの加算処理の重さテスト
本プロジェクトには、Stringでの加算処理がドレだけ重いか確認するためにテストケースを用意しました。
testシーンを開いて実行してみてください。Profilerで確認するとドレほど重いかが確認できます。画面をクリックすることで、今回の Sbt.iを入れるかどうかの変更が可能になっています。
画面中の「StrOpe Flag」がtrueになることで処理が格段に軽くなるのを確認できるかと思います。
コチラのテストでは、275 msec掛かっていた以下の処理が 3.5msecまで減ることを確認しております。
また、Managed memory確保量も 382.2MB -> 360B になるのを確認しました。
var str = "TestD";
for (int i = 0; i < 20000; ++i){
str += "a";
}