問題タブ [stringbuilder]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
8 に答える
184593 参照

c# - StringBuilder の改行文字

どのように改行 (\n\r) 文字を追加しますStringBuilderか?

0 投票する
2 に答える
314 参照

optimization - 文字列を最適化します。フォーマット + 置換

私はこの機能を持っています。Visual Studio のプロファイルでは、string.Format の行がホットであり、多くの時間を費やしていました。

このループをより効率的に記述するにはどうすればよいですか?

0 投票する
4 に答える
2180 参照

c# - ラージ オブジェクト ヒープ内の最大連続メモリ ブロックを最大化する方法

状況は、XML ドキュメントを文字列として返すリモート サーバーに対して WCF 呼び出しを行っていることです。

ほとんどの場合、この戻り値は数 K、時には数十 K、まれに数百 K ですが、ごくまれに数メガバイトになることもあります (最初の問題は、私が知る方法がないことです)。

悲しみを引き起こしているのは、これらのまれな機会です。次のようなスタック トレースが表示されます。

私は読んだことがありますが、それはラージオブジェクトヒープが断片化しすぎているためです。そのため、StringBuilder.EnsureCapacity へのクイックチェックを呼び出しの前に行っても、OutOfMemoryException がより早くスローされます (必要なものを推測しているため)。 、実際にはそれほど必要ないかもしれないので、私のチェックは解決するよりも多くの問題を引き起こしています)。私にできることはあまりないという意見もあります。

私が自分自身に尋ねた質問のいくつか:

  • メモリの使用量を減らします - リークをチェックしましたか? はい。メモリ使用量は増減しますが、これを保証する基本的な増加はありません。失敗することもありますが、以前はその段階で成功していました。
  • 少額の送金オプションではありません。これはサードパーティの Web サービスであり、私には制御できません (または、少なくとも解決には長い時間がかかります。それまでの間、まだ問題があります)。
  • LOH が失敗する可能性を低くするために、LOH に何かできることはありますか? ...今、これは最も実り多いコースです。これは 32 ビット プロセスですが (さまざまな政治的、技術的、および退屈な理由でそうする必要があります)、通常は数百メガバイトの空き領域があります (これまでに見られた失敗の最大量の倍数)。
  • LOH を監視できますか? perfmon を使用すると、ヒープのサイズを追跡できますが、使用可能な最大の連続したメモリ ブロックを監視する方法はないと思います。

質問: 試してみるべきことについて何かアドバイスや提案はありますか?

0 投票する
2 に答える
1043 参照

.net - StringBuilderとXmlDocumentを使用する、またはXMLドキュメントの作成に関連する利点は何ですか?

これは少しコードの臭いかもしれませんが、 XMLドキュメントを作成するときに、 XmlDocumentではなくStringBuilderを使用する、実稼働コードであることがわかりました。場合によっては、これらはライトワンス操作(たとえば、ドキュメントを作成してディスクに保存する)であり、他の場合は、作成された文字列をXmlDocumentに渡して、クライアントに返されるドキュメントにXslTransformを実行します。

非常に明白な質問です。このように物事を行うことにはメリットがありますか、それはケースバイケースで行われるべきものですか、それともこれは物事を行う間違った方法ですか?

0 投票する
2 に答える
2221 参照

c# - WTSVirtualChannelRead は文字列の最初の文字のみを読み取ります

Windows ターミナル サービス クライアントで仮想チャネルを使用するための hello world タイプのプログラムを作成しようとしています。

MSTSC COM オブジェクトと ActiveX コントロールからデータを送信しています。

NativeMethods.WTSVirtualChannelRead実行するたびに例外が発生します

これに関するヘルプは大歓迎です。

編集 -- mHandle は、関数の実行時にゼロ以外の値を持ちます。そのチェックを追加するためにコードを更新しました。

EDIT2 -- P/Invoke Interop Assistantを使用して、新しい署名を生成しました

テキスト文字列を受け取るようになりましたが (Yea!)、テスト文字列の最初の文字しか取得しません (Boo!)。何がうまくいかないのかについてのアイデアはありますか?

EDIT 3 --- hello world を読み取る必要がある呼び出しの後。

BytesRead = 24

Buffer.Length = 1; バッファ容量 = 16; Buffer.m_S​​tringValue = "H";

0 投票する
4 に答える
868 参照

c# - SQL DataReader クエリから null 値を表示する方法

次のように DataReader と StringBuilder (C#.NET) を使用しています。

これは私の使用には最適ですが、行がnullの場合、単に「」ではなく「null」を返す必要があります。それを達成するための良い方法は何ですか?

提案は非常に高く評価されています

0 投票する
2 に答える
555 参照

c# - String.Concat の使用/悪用を検出するツール (StringBuilder を使用する必要があります)

少数の連結の代わりに StringBuilder を使用しないことはよく知られています。

ただし、かなりのサイズのループでは、StringBuilder が当然の選択です。

生の C# ソースまたはコンパイル済みアセンブリのいずれかで実行して、ソース コード内で呼び出されている場所を特定できるツールはありますか? String.Concat(よくわからない場合は、IL 出力にs += "foo"マップされString.Concatます。) 明らかに、プロジェクト全体を現実的に検索し、すべてを評価+=して左辺値が文字列かどうかを識別することはできません。

理想的には、for/foreach ループ内の呼び出しのみを指摘しますが、すべて の注目の誤検知にも我慢しますString.Concat。また、使用するコードを自動的にリファクタリングするリファクタリング ツールがいくつかあることは承知していますが、現時点では使用法をStringBuilder特定することにのみ関心があります。Concat

私は自分のコードで Gendarme と FxCop を定期的に実行していますが、これらのツールはどちらも、私が説明した内容を識別しません。ただし、@Cristian が指摘したように、以前のバージョンの FxCop はこれをチェックしていました。古いバージョンの FxCop からそのルールだけを抽出し、新しいバージョン (1.36) にそれを使用するように指示する方法があるでしょうか?

0 投票する
2 に答える
6188 参照

vb.net - VB StringBuilderを空の文字列に設定する適切な方法は何ですか?

私はVBのStringBuilderを使用していますが、ビルダーを空にする/新しい文字列に設定するための「ベストプラクティス」と見なされるものに興味がありました。次のようになりますか?

または「より良い」方法はありますか?

ありがとう

0 投票する
5 に答える
3195 参照

c# - P/StringBuilder を渡された関数を呼び出す

C#ファイルに私は持っています

文字列データは入力であり、StringBuilder の応答は関数が何かを書き込む場所です

アーカイブ関数のプロトタイプ (C で記述) は次のようになります。

そして、dataChr で文字列を受け取り、

C#から私はそれを次のように呼びます:

これは機能しますが、問題は、ご覧のとおり、StringBuilder のサイズに値を与えることですが、アーカイブ関数は、StringBuilder に与えたサイズよりも (かなり) 大きいテキストを返す可能性があります。これを修正する方法はありますか?

0 投票する
4 に答える
749 参照

c# - StringBuilder リソースの管理

私の C# (.NET 2.0) アプリケーションには、容量が 2.5MB の StringBuilder 変数があります。明らかに、このような大きなバッファーがいっぱいになるたびに、そのような大きなバッファーをより大きなバッファー スペースにコピーしたくはありません。とにかく、その時点までにバッファ内に非常に多くのデータがあるため、古いデータを削除することは実行可能なオプションです。私がこれをどのように行っているかについて明らかな問題を誰かが見ることができますか (つまり、私が解決しているよりも多くのパフォーマンスの問題を引き起こしていますか)、または問題ないように見えますか?

編集:追加情報:

このアプリケーションでは、新しいデータがシリアル接続を介して非常に高速に (ミリ秒単位で) 受信されます。アプリケーションのパフォーマンスが低下するため、この新しい情報を複数行のテキストボックスに頻繁に入力したくないので、StringBuilder. StringBuilderときどき、アプリケーションは の内容をテキスト ボックスにコピーし、内容を消去しStringBuilderます。