2

私はデジタル画像処理を学ぼうとしていますが、c#を使用している友人を見つけました。彼がC#を使用する非常に重要な理由がありますunsafe。c#にキーワードがあり、彼のコード(アルゴリズム部分)のパフォーマンスはc ++で同じコードの75%に達する可能性があり、これは彼にとって十分です。

彼は私にc#に目を向けるように勧めていますが、私は長年のJavaプログラマーです。Javaにもクラスがあることは知っていUnsafeますが、これを使用したことはありません。パフォーマンスがC#と同じくらい良いかどうかはわかりません。

だから私はJavaでのパフォーマンスを知りたいのですがUnsafe、画像処理にJavaを使用するのは良い考えですか?


アップデート

パフォーマンスを意識したタスクに安全でないコードを使用するだけで、どこでも使用するわけではありません。

4

3 に答える 3

3

安全でないということは、管理された環境ですべてのオーバーヘッドを回避できることを意味します。すべての範囲とタイプのチェック、ガベージコレクション、リフレクションなど。安全でないものを使用してコードを高速化するかどうかは、すべて何を書いたかによって異なります。OOが導くピクセルクラスや構造体のリストとは対照的に、主な最適化ポイントは生のメモリの大きなブロックを処理することだと思います。

于 2012-08-11T13:07:18.407 に答える
2

私はC#が大好きですが、機能が非常に限られているため、ある言語を別の言語よりも選択することは、私には非常に弱い議論のように思えます。友達の意見に基づいてではなく、あなたのニーズや好みに基づいて言語を選んでください!プログラミング言語は単なるツールです。あなたはそのような長年の経験を真剣に捨てるだろうか?最も使いやすい言語を使用してください。

于 2012-08-11T13:11:12.557 に答える
0

このディスカッションをチェックして、ここでプラスとマイナスの両方のポイントを考え出します

これはC#の記事から引用したものですが、Javaにも当てはまると思います。ここを確認してください 。安全でないコード、つまりアンマネージコードでは、ポインターを宣言して使用することができます。しかし、問題は、なぜアンマネージコードを作成するのかということです。オペレーティングシステムとインターフェイスするコードを記述したい場合、メモリマップドデバイスにアクセスしたい場合、またはタイムクリティカルなアルゴリズムを実装したい場合は、ポインタを使用すると多くの利点が得られます。

ただし、ポインタを使用することにはいくつかの欠点もあります。ポインタがコンパイル時に32ビット量になるように選択された場合、64ビットマシンで実行されたとしても、コードは4ギガのアドレス空間に制限されます。コンパイル時にポインターが64ビットになるように選択された場合、コードは32ビットマシンで実行できませんでした。

于 2012-08-11T13:03:23.587 に答える