ホームページ  >  記事  >  バックエンド開発  >  C# での Builder クラスと Buffer クラスの使用法の簡単な説明

C# での Builder クラスと Buffer クラスの使用法の簡単な説明

巴扎黑
巴扎黑オリジナル
2017-05-15 09:27:143198ブラウズ

この記事では、C# の String StringBuilder と StringBuffer の 3 つのクラスの使用法を簡単に紹介します。必要な方は参考にしてください。実際には機能しません。StringBuilder を使用すれば問題ありません。あなたの考えが間違っているとは言えませんが、より良い提案をすることはできます。以下に、これら 3 つのカテゴリについて簡単に紹介します。

String クラス 私たちが日常的に使用していると、記述したコードがボックス化操作 (値型から参照型への変換) を行う傾向があることに気づかないことがよくあります。たとえば、非常に一般的な文字列連結です

string str=9+"test"; IL コードを見ると、ここでボックス化操作が発生していることがわかります。したがって、これを使用することをお勧めします (値の型を文字列に変換するときは、必ず ToString メソッドを使用してください)。したがって、通常コードを記述するときは、ボックス化とボックス化解除の操作に注意を払う必要があります (後で紹介する汎用コレクションは、ボックス化とボックス化解除の操作を解決するだけです)。ボックス化操作のプロセス: 値型をマネージド ヒープに配置してメモリを割り当てます。値型自体によって割り当てられるメモリに加えて、メモリの合計には、型オブジェクト ポインタと同期インデックス ブロックによって占有されるメモリも追加する必要があります。次に、値型の値がヒープ メモリに再割り当てされ、最後に参照型のオブジェクトのアドレスが返されます。

多くの型 (値型) に ToString メソッドが付属していることはわかっています。これを使用すると、なぜボックス化操作が発生しないのでしょうか。これは単純な真実です (ただし、He は特殊な値型です)。 C# 言語の設計者は、これを行うためにこの方法を思いつきましたstring str=9+"test"; 通过查看IL代码可以知道这里发生了装箱的操作。所以建议使用(在把值类型转换为字符串的时候,记得用ToString方法)。所以平时写代码的时候,要注意下,装箱和拆箱的操作(之后推出的泛型集合不就是为了解决装箱和拆箱的操作)。装箱操作的过程:把值类型放到托管堆里面分配内存,除了值类型本身所分配的内存外,内存总量还要加上类型对象指针和同步索引块所占用的内存,之后再将值类型的值重新分配到堆内存当中,最后再返回引用类型的对象的地址。

 我们知道很多类型(值类型)都自带了一个ToString方法,为毛用这个就不会发生装箱操作呢,很简单的一个道理,不是有人和你说String是特殊的值类型(虽然他是引用类型),C#语言的设计者,为了做到这一点,他想出了这个方法

把String对象,一旦赋值就不可改变(叫做字符串的恒定性),赋值完了之后,再对String进行拼接,赋值等,都会再内存里面重新分配一个新的内存空间。

  StringBuilder

  基于上面的问题,string类在重新赋值会重新去分配内存空间,所以为了解决这个问题,微软推出了一个StringBuilder的类。可以看看StringBuilder类是如何做到不重新分配内存的呢。

  通过阅读StringBuiler类的实现,我们可以发现

   internal const int DefaultCapacity = 0x10; StringBuilder

String オブジェクトは、一度割り当てられると変更できません (割り当てが完了した後は、文字列の定常性と呼ばれます)。 、文字列オブジェクトを変更することはできません。文字列の結合、割り当てなどにより、メモリ内に新しいメモリ領域が割り当てられます。

StringBuilder

上記の問題に基づいて、string クラスは再割り当て時にメモリ領域を再割り当てするため、この問題を解決するために Microsoft は StringBuilder クラスを開始しました。 StringBuilder クラスがどのようにメモリを再割り当てしないのかがわかります。

StringBuiler クラスの実装を読むと、 external const int DefaultCapacity = 0x10; StringBuilder クラスが見つかり、デフォルトのサイズは 16 です。これは、StringBuilder の長さを指定しない場合を意味します。 16 を超えると、メモリが再割り当てされます。特定の実装については、StringBuilder クラスの Append ソース コードを参照してください。

通常 StringBuilder を使用する場合、適切な長さを指定する必要があることがコードからわかります。ソース コード内の固定ステートメント ブロック (平たく言えば、ガベージ コレクションを無効にして変数アドレスをリサイクルできます)。 要約: コードを記述するときは、ボックス化操作とボックス化解除操作に注意し、stringBuilder の使用に注意を払う必要があります。

【関連する推奨事項】

1.

特別な推奨事項🎜🎜「php Programmer Toolbox」V0.1バージョンのダウンロード🎜🎜🎜2. 🎜ASPの無料ビデオチュートリアル🎜🎜🎜3.ヤンフイさんのASP の基本的なビデオチュートリアル🎜🎜

以上がC# での Builder クラスと Buffer クラスの使用法の簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。