ホームページ バックエンド開発 C#.Net チュートリアル C# での Builder クラスと Buffer クラスの使用法の簡単な説明

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

May 15, 2017 am 09:27 AM
c# string stringbuffer stringbuilder

この記事では、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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C# を使用した Active Directory C# を使用した Active Directory Sep 03, 2024 pm 03:33 PM

C# を使用した Active Directory のガイド。ここでは、Active Directory の概要と、C# での動作方法について、構文と例とともに説明します。

C# シリアル化 C# シリアル化 Sep 03, 2024 pm 03:30 PM

C# シリアル化のガイド。ここでは、C# シリアル化オブジェクトの導入、手順、作業、例についてそれぞれ説明します。

C# の乱数ジェネレーター C# の乱数ジェネレーター Sep 03, 2024 pm 03:34 PM

C# の乱数ジェネレーターのガイド。ここでは、乱数ジェネレーターの仕組み、擬似乱数の概念、安全な数値について説明します。

C# データ グリッド ビュー C# データ グリッド ビュー Sep 03, 2024 pm 03:32 PM

C# データ グリッド ビューのガイド。ここでは、SQL データベースまたは Excel ファイルからデータ グリッド ビューをロードおよびエクスポートする方法の例について説明します。

C# のパターン C# のパターン Sep 03, 2024 pm 03:33 PM

C# のパターンのガイド。ここでは、C# のパターンの概要と上位 3 種類について、その例とコード実装とともに説明します。

C# の階乗 C# の階乗 Sep 03, 2024 pm 03:34 PM

C# の Factorial のガイド。ここでは、C# での階乗の概要について、さまざまな例とコード実装とともに説明します。

C# の素数 C# の素数 Sep 03, 2024 pm 03:35 PM

C# の素数ガイド。ここでは、C# における素数の導入と例を、コードの実装とともに説明します。

マルチスレッドと非同期C#の違い マルチスレッドと非同期C#の違い Apr 03, 2025 pm 02:57 PM

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。

See all articles