質問

きのポインタ利用にC#のコードについて教えてください。特典にはどんなものがありますか?のでお勧めのマン(Microsoft)?

役に立ちましたか?

解決

さらには"人"が自:

の利用のポインタにはほとんど必要なクライアントまで、フルのC#でも状況もあることを必要とします。例として、安全でないコンテキストをポインタが必要により、以下の場合:

  • 対応既存構造物のディスク
  • 先端COMやプラットフォームを呼び出すシナリオを伴う構造をヒントにし
  • 性能を重視したコード

の使用、安全でない文脈などは控えてください。

具体的には、安全でない文脈ではご使用にならないでください図書CコードのC#.

注意:

コードを記述を用い、安全でない文脈で確認できないものにすることもできますので、その場合のみ実行される処理ブロックのコードは完全に信頼を得ています。つまり、安全でないコードが実行できなかには信頼できない環境です。例えば実行できません、安全でないコードから直接インターネット。

参考

他のヒント

あなたがする必要がある場合。

あなたが偽色に大規模なグレースケール画像が必要であることを言って、2000×2000ピクセルは言います。まずGetPixel()SetPixel()を使用して「安全」バージョンを記述します。それは、素晴らしい作品場合は、上に移動します。それはあまりにも遅くなることが判明した場合、あなたは(例のためのカラーマトリクスを忘れる)画像を構成する実際のビットで取得する必要があるかもしれません。そこ危険なコードを使用する方法について「悪い」ものは何もありませんが、それはプロジェクトが複雑にため、必要なときだけ使用する必要があります。

私はそうする必要が今まで覚えていないことができます - しかし、私は多くの相互運用を行っていません。それは、最も一般的なアプリケーションですが、私は信じている:ネイティブコードを呼び出します。ポインタを使用すると、あなたはいくつかのコードを最適化することができますが、それは私の経験ではかなり珍しい非常に数回はあります。

それはどのガイドなら、私は自分自身がC#でかなり経験豊富であることを考えるが、私はどんな危険なコードをしなければならなかった場合、私は私を導くためにスペック/書籍/ MSDNに相談する必要があると思います。もちろん、危険なコードに満足してますが(例えば)クエリ式...

とあまり精通している人の多くが存在します

その問題点について:-

  • 安全でないコードは検証できます。このコード のみ されたユーザーから完全に信頼される、こだまが必要なユーザーのコードのどこからでも以下に完全に信頼できる(例えばネットワーク共有に設定されていないする)には、螺.
  • が検証可能性(hmいう言葉をもとき 潜在的に べての空港を表示一部の空港を表記憶ます。ご 潜在的に を全体のバグの奥には、アプリケーションから利用-バッファ,ぶポインタ矢田矢田言え言え.なる可能性が腐敗したデータ構造でメモリーな社会の実現には時のポインタが変わっている。
  • また、安全でないコードにアクセス管理オブジェに必要なもの"ピン'します。このGCは不可動オブジェクトの周りのメモリをこのヒープで分割されていることを示す。この性能に影響;そのために、常に重要かどうかを判定可能性のケ得ないようこの問題です。
  • コードになりにく理解のためのプログラマになじめないでポリシーです。そして責任を負い撮影をオフに自由'安全でないコードを与えます。
  • となりますが書くことができる国連-タイプ-安全なコードこんな不くの利点コプラシェドマリーナかファジィ管理します。今まで出会い恐ろしいタイプの安全問題に関するなぜかその一歩後退か?
  • このコード uglier.

んだりできるリストに追加さ;一般的に、他人の言-回避の場合を除きます。e.g.呼ポ法についてp/呼び出しを必要とする特別なポインタfunking.その後もmarshallerなどの防止に必要です。

'The man'といっても避けない限り、必要な基本とさせていただきます。

あの素敵な記事をピン止め こちらにMSDN にあります。

私は、ネットワーク共有へのサービスへのアクセスを許可するように偽装を使用するように危険なコードを使用していました。あなたは何をやっている知っているかどうかは問題ではありません。

あなたがそれらを必要とする場合は、

あなたはそれらを使用する必要があります。いくつかのトリッキーな相互運用シナリオを扱うときに主にこのは次のようになります(私は、.NET 1.0でDPAPIのマネージラッパーを書いたとき、たとえばそれらが必要とされた)が、非常に時折、それはstackallocまたは類似を使用して(プロファイリングの後に!)パフォーマンスを向上させることかもしれません。

これは、彼らは、C#の設計者ですと同じくらいに、マイクロソフトが推奨する、と彼らはそれにunsafeコードを書くための機能を追加することを決定しましたています。あなたは事実上の実装の選択であるように設計されていないことを、キーワードの選択とキーワードを使用してそれを書くいるメソッド/クラスを記述するための要件から見ることができます。

BitConverterによって提供されていないキャストのような

Reinterpretive。
具体的にあなたが気にすべてがビットであるハッシュ関数のためにint型にunint変換ます。

だけでなく、あなたがハッシュのために再び最も有用なよく知られた長さのバイト*、として扱う必要があり、構造体のCまたはC ++慣用関数について推論し、いくつかの有用なを使用します。

正直にかかわらず、(それらの配列にそれを行うことによって)メモリ構造体で(非常に特定)の超高速バイナリシリアルは、この優れたちょうどC ++ / CLIにドロップすることによって行われます。

多くの場合、ポインタを必要とするタスクは、多くの場合、C ++ / CLIでそれをやって、その後、DLLとして#プロジェクトcはあなたにこれをインポートすることで、より良い解決できることを言わなければなりません。これは、コードが「安全」であるか否かが変更されませんが、それはよりアクセスし、ポインタベースの構造上で動作するための便利な機能の束を作ります。あなたが本当にしたい場合にも、あなたは、ジェネリック型または列挙型で約混乱することができます。

これを実行する必要がほとんどの開発者の可能性は、リモート確かです。便利なあなたががそれを必要とするとき...

もちろん、それはそれは、「安全でない」ラベルだ理由です、「推奨」ではありません。しかし、離れてあなたを怖がらせてはいけないこと。けれども、それはあなたのコードで、二回に見えるようにする必要があります。おそらく、それを行うための管理方法はありますか?

安全でないコードを使用しての.NET Framework benenfitsを忘れるようなもので、私はそれらを使用する必要性を持っていたhaventは、今日、私はスタックやもののように作成した、昔ながらの構造に一度、それらを使用するが、それは唯一の学校のためだった。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top