問題タブ [bytearray]
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# - System/mscorlib コードがこれほど高速なのはなぜですか? 特にループの場合は?
これは、私が掘り下げてきた個人的なプロジェクトです。基本的に、StreamReader を使用してテキスト ファイル (20 MB から約 1 GB まで) を解析します。パフォーマンスはかなりしっかりしていますが、それでも... バイナリで解析するとどうなるか知りたくてうずうずしています。誤解しないでください。私は時期尚早に最適化しているわけではありません。私は間違いなく、「見る」ためだけに意図的にマイクロ最適化しています。
そのため、バイト配列を使用してテキスト ファイルを読み込んでいます。調べてみると、新しい行は (Windows) 標準の CR/LF または CR または LF になる可能性があります...かなり面倒です。CR で Array.IndexOf を使用して、LF をスキップできるようにしたいと考えていました。代わりに、IndexOf と非常によく似たコードを書いていますが、いずれかをチェックし、必要に応じて配列を返しています。
要点: IndexOf と非常によく似たコードを使用しても、私のコードは依然として非常に遅くなります。800MB のファイルを使用して全体像を把握するには、次のようにします。
- IndexOf を使用して CR を探す: ~320mb/s
- StreamReader と ReadLine の使用: ~180mb/s
- for ループ複製 IndexOf: ~150mb/s
for ループ (~150mb/s) を含むコードは次のとおりです。
これはより高速なコード ブロックです (~320mb/s):
(いいえ、本番環境には対応していません。特定のケースでは爆発します。私はそれらのほとんどを無視するために 128kb サイズのバッファを使用しています。)
だから私の大きな質問は...なぜ Array.IndexOf はそれほど速く動作するのですか? 本質的に同じで、配列を歩く for ループです。mscorlib コードの実行方法について何かありますか? 上記のコードを実際に IndexOf を複製するように変更し、CR だけを探してから、IndexOf を使用する場合のように LF をスキップしても役に立ちません。エラー...私はさまざまな順列を経験してきましたが、おそらく私が見逃している明らかなバグがあるほど遅いですか?
ところで、ReadLine を調べたところ、if ブロックではなく switch ブロックを使用していることに気付きました...似たようなことをすると、奇妙なことに、パフォーマンスが約 15 mb/s 向上します。それはまた別の質問です (なぜ switch は if よりも速いのですか?) しかし、私はそれを見ていたことを指摘したいと思いました。
また、VS の外部でリリース ビルドをテストしているため、デバッグは行われません。
bytearray - サムネイルを作成してからバイト配列に変換する
サムネイルを作成してからバイト配列に変換するのに苦労しています。3 つの方法を試しましたが、3 回ともエラーが発生しました。
1 つ目は、Bitmap.GetThumbnailImage を使用することでした。これは過去に使用したもので、Response.OutputStream に直接保存しました。
2 番目は、DrawImage() で System.Drawing.Graphics を使用していました。まだ行きません。
3 つ目は、新しいビットマップを作成し、古いビットマップを渡し、新しいサイズを設定するだけでした。同じエラー。
値を null にすることはできません。
パラメーター名: エンコーダー
説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。
例外の詳細: System.ArgumentNullException: 値を null にすることはできません。
パラメーター名: エンコーダー
ソース エラー:
現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。
スタック トレース:
[ArgumentNullException: 値を null にすることはできません。
パラメータ名:エンコーダ】
System.Drawing.Image.Save(ストリームストリーム、ImageCodecInfoエンコーダ、EncoderParameters、encoderParams) +615244
これが私のメソッドのコードです。多分誰かが私が間違っていることを見るでしょう。GetThumbSize についてよくわからない場合のために説明すると、これは画像サイズと最大サム サイズを取得し、アスペクト比を維持するために実際のサイズを計算する単純なメソッドです。
この行はエラーをスローしています:
何か案は?助けてくれてありがとう!
c# - C#で2つ以上のバイト配列を追加する
C#で2バイト配列を追加するための最良の(以下を参照)方法はありますか?
完全に制御できるふりをして、最初のバイト配列を十分に大きくして、最後に2番目のバイト配列を保持し、Array.CopyTo関数を使用できます。または、個々のバイトをループして割り当てを行うこともできます。
より良い方法はありますか?バイト配列を文字列に変換して結合し、それらを元に戻すようなことを行うことは、上記のどちらの方法よりも優れているとは想像できません。
最高/より良い(順番に)に関して:
- 最速
- 最小のRAM消費
制約は、.NET2.0フレームワークで作業する必要があるということです。
推奨される2つの選択肢は、MemoryStreamとBlockCopyです。10,000,000ループの簡単な速度テストを3回実行したところ、次の結果が得られました。
ミリ秒単位での10,000,000ループの平均3回の実行:
- BlockCopy時間:1154、範囲は13ミリ秒
- MemoryStream GetBuffer時間:1470、範囲は14ミリ秒
- MemoryStream ToArray時間:1895、範囲は3ミリ秒
- CopyTo時間:2079、範囲は19ミリ秒
- バイトごとの時間:2203、範囲は10ミリ秒
1000万ループを超えるList<byte> AddRangeの結果:List <byte>時間:16694
相対RAM消費量(1はベースライン、高いほど悪い):
- バイトごと:1
- BlockCopy:1
- コピー先:1
- MemoryStream GetBuffer:2.3
- MemoryStream ToArray:3.3
- リスト<バイト>:4.2
テストは、一般に、バイトコピーを大量に実行している場合を除いて、バイトコピーを確認することは、焦点を当てる価値がないことを示しています[たとえば、1,000万回の実行で1.1秒の差が生じます]。
c# - Silverlight ImageSource を byte[] に変換するにはどうすればよいですか?
キャンバスにあるシンプルな ImageSource Silverlight コントロールがあります。正常に動作します。ImageSource の内容をバイト配列に抽出する方法はありますか?
乾杯!
PS。SL のどのバージョンでも問題ありません。
asp-classic - adodb でタイムスタンプ フィールドの値を取得する - 従来の ASP からバイト配列を読み取る方法
データベースにクエリを実行して、aspとadodbを使用しています(ms sql 2005)
タイムスタンプ型のスタンプという名前のフィールドがあります
aspで次のようになります
field.ActualSize: 8 field.DefinedSize: field.Name: スタンプ field.Type: adBinary (128)
field.Attributes: 528 (adFldFixed (16) + adFldRowVersion (512) ) (adFldLong がオンになっていないため、getchunk メソッドを使用できません!) http://msdn.microsoft.com/en-us/library/ ms676678(VS.85).aspx
デバッガーで field.value と入力すると、次のようになります。
GETしたいものです!!!! しかし、私はそれを行う方法がわかりません...
変数に代入できますが、各要素を取得できません
で試しました
(引数の数が間違っています)
問題は、バイト配列を持っていることです。どうすればそれを読み取ることができますか???
c# - C#:何がより多くのメモリを消費しますか?文字列またはバイト配列?
C#:何がより多くのメモリを消費しますか?文字列またはバイト?
「MyText」という行があるとしましょう。その行は、バイトまたは文字列として、より多くのメモリを消費しますか?
c# - C#: バイト配列を XML に格納する
Byte[] 配列を XML に (C# を使用して) 格納する簡単な方法は何でしょうか?
c# - バイト配列を文字列に変換するには?
次の関数を使用: http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndaelmanaged.aspx
ご覧のとおり、バイト配列が返されるので、バイト配列を文字列に変換したいと思います。
バイト配列から文字列に、またはその逆に変換するにはどうすればよいですか?
actionscript-3 - Flash -> ByteArray -> AMFPHP -> 無効な画像?
画像を Flash にロードし、JPGEncoder を使用して画像を ByteArray にエンコードし、これを AMF PHP に送信してバイト配列をファイルに書き出します。これはすべて正しく機能しているように見え、結果のファイルを Photoshop CS4 でダウンロードできます。デスクトップから開いたり、Flash で開いたりしようとすると、動作しません... Picasa のデフォルトの画像ブラウザで「無効」と表示されます
bytearray をファイルに書き込むために使用するコードは次のとおりです-
それだけです... NetConnection クラスを使用して接続し、サービスを呼び出します。jpg データを送信していると言う必要がありますか? 私は JPGEncoder がそれを処理したと思いました。ファイルを書き込む前に bytearray を検証するにはどうすればよいですか? MIMEタイプか何かを設定する必要がありますか..少し初心者の質問を許してください.少しの知識は危険なことになる可能性があります.
ありがとう
--------------------------------------- パート II ---------- ----------------------------------
ここにいくつかのコードがあります -
1) 画像を Flash Player にロードする
助けてくれてどうもありがとう
c# - C#: xml CData のバイト配列
xml のブロックを返す WCF サービスがあります。1 つの要素は CData[] セクションです。私のアプリケーションはデータベースから HTML ファイルを読み取り、ABCPDF を使用して PDF バイト [] 配列に変換します。次に、私の XmlWriter Im で CData セクションにバイトを追加します。
問題は、結果の xml が次のようになることです。
バイト文字列を CData セクションに取得するにはどうすればよいですか? 私は次のようなことを試しました:
と
立ち往生!! どんな助けでも素晴らしいでしょう、ありがとう!