問題タブ [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.
c# - StringBuilder の改行文字
どのように改行 (\n\r) 文字を追加しますStringBuilder
か?
optimization - 文字列を最適化します。フォーマット + 置換
私はこの機能を持っています。Visual Studio のプロファイルでは、string.Format の行がホットであり、多くの時間を費やしていました。
このループをより効率的に記述するにはどうすればよいですか?
c# - ラージ オブジェクト ヒープ内の最大連続メモリ ブロックを最大化する方法
状況は、XML ドキュメントを文字列として返すリモート サーバーに対して WCF 呼び出しを行っていることです。
ほとんどの場合、この戻り値は数 K、時には数十 K、まれに数百 K ですが、ごくまれに数メガバイトになることもあります (最初の問題は、私が知る方法がないことです)。
悲しみを引き起こしているのは、これらのまれな機会です。次のようなスタック トレースが表示されます。
私は読んだことがありますが、それはラージオブジェクトヒープが断片化しすぎているためです。そのため、StringBuilder.EnsureCapacity へのクイックチェックを呼び出しの前に行っても、OutOfMemoryException がより早くスローされます (必要なものを推測しているため)。 、実際にはそれほど必要ないかもしれないので、私のチェックは解決するよりも多くの問題を引き起こしています)。私にできることはあまりないという意見もあります。
私が自分自身に尋ねた質問のいくつか:
- メモリの使用量を減らします - リークをチェックしましたか? はい。メモリ使用量は増減しますが、これを保証する基本的な増加はありません。失敗することもありますが、以前はその段階で成功していました。
- 少額の送金オプションではありません。これはサードパーティの Web サービスであり、私には制御できません (または、少なくとも解決には長い時間がかかります。それまでの間、まだ問題があります)。
- LOH が失敗する可能性を低くするために、LOH に何かできることはありますか? ...今、これは最も実り多いコースです。これは 32 ビット プロセスですが (さまざまな政治的、技術的、および退屈な理由でそうする必要があります)、通常は数百メガバイトの空き領域があります (これまでに見られた失敗の最大量の倍数)。
- LOH を監視できますか? perfmon を使用すると、ヒープのサイズを追跡できますが、使用可能な最大の連続したメモリ ブロックを監視する方法はないと思います。
質問: 試してみるべきことについて何かアドバイスや提案はありますか?
.net - StringBuilderとXmlDocumentを使用する、またはXMLドキュメントの作成に関連する利点は何ですか?
これは少しコードの臭いかもしれませんが、 XMLドキュメントを作成するときに、 XmlDocumentではなくStringBuilderを使用する、実稼働コードであることがわかりました。場合によっては、これらはライトワンス操作(たとえば、ドキュメントを作成してディスクに保存する)であり、他の場合は、作成された文字列をXmlDocumentに渡して、クライアントに返されるドキュメントにXslTransformを実行します。
非常に明白な質問です。このように物事を行うことにはメリットがありますか、それはケースバイケースで行われるべきものですか、それともこれは物事を行う間違った方法ですか?
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_StringValue = "H";
c# - SQL DataReader クエリから null 値を表示する方法
次のように DataReader と StringBuilder (C#.NET) を使用しています。
これは私の使用には最適ですが、行がnullの場合、単に「」ではなく「null」を返す必要があります。それを達成するための良い方法は何ですか?
提案は非常に高く評価されています
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) にそれを使用するように指示する方法があるでしょうか?
vb.net - VB StringBuilderを空の文字列に設定する適切な方法は何ですか?
私はVBのStringBuilderを使用していますが、ビルダーを空にする/新しい文字列に設定するための「ベストプラクティス」と見なされるものに興味がありました。次のようになりますか?
または「より良い」方法はありますか?
ありがとう
c# - P/StringBuilder を渡された関数を呼び出す
C#ファイルに私は持っています
文字列データは入力であり、StringBuilder の応答は関数が何かを書き込む場所です
アーカイブ関数のプロトタイプ (C で記述) は次のようになります。
そして、dataChr で文字列を受け取り、
C#から私はそれを次のように呼びます:
これは機能しますが、問題は、ご覧のとおり、StringBuilder のサイズに値を与えることですが、アーカイブ関数は、StringBuilder に与えたサイズよりも (かなり) 大きいテキストを返す可能性があります。これを修正する方法はありますか?
c# - StringBuilder リソースの管理
私の C# (.NET 2.0) アプリケーションには、容量が 2.5MB の StringBuilder 変数があります。明らかに、このような大きなバッファーがいっぱいになるたびに、そのような大きなバッファーをより大きなバッファー スペースにコピーしたくはありません。とにかく、その時点までにバッファ内に非常に多くのデータがあるため、古いデータを削除することは実行可能なオプションです。私がこれをどのように行っているかについて明らかな問題を誰かが見ることができますか (つまり、私が解決しているよりも多くのパフォーマンスの問題を引き起こしていますか)、または問題ないように見えますか?
編集:追加情報:
このアプリケーションでは、新しいデータがシリアル接続を介して非常に高速に (ミリ秒単位で) 受信されます。アプリケーションのパフォーマンスが低下するため、この新しい情報を複数行のテキストボックスに頻繁に入力したくないので、StringBuilder
. StringBuilder
ときどき、アプリケーションは の内容をテキスト ボックスにコピーし、内容を消去しStringBuilder
ます。