質問
きればいい時間なお、実際に動作させるために"安全"と"固定"クライアントまで、フルのC#コードについて教えてください。ったのですが、なんと利用します。
のコードを参照してください...
fixed (byte* pSrc = src, pDst = dst) {
//Code that copies the bytes in a loop
}
に比べてを使っているだけで...
Array.Copy(source, target, source.Length);
次のコードを見られます。NETフレームワークの最初の一部のコードからコピーされ、Microsoftのサイト http://msdn.microsoft.com/en-us/library/28k1s2k6(VS.80).aspx.
内蔵の配列になります。Copy()は飛躍的に高速を使用、安全でないコードです。これだからといって、次はより良い書きの最初の、あくまで目安ですが、例えば、が、どんな状況をうまでもを利用する必要が安全でない固定コードのためのものはありますか?※この記事のオリジナルはこの貧しいウェブ-デベロッパーゴかく上げます。
解決
にも役立ちinteropとポコードです。任意のポインタに渡されるポリシー機能を修正する必要はあり(通称.ピン留めを防ぐため、ガベージコレクタからの移転を裏付けます。
ご利用の場合はP/呼び出しは、デフォルトmarshallerのままピントオブジェクトです。Ru,キーワードの実行に必要なカスタム整列化、ru,キーワードに必要なピンは、オブジェクトのためのものより長い期間のシングルP/呼び出します。
他のヒント
に使用しました不安全-ブロックを操作するビットマップ-データです。原料のポインタ-アクセスが大幅によSetPixel/GetPixel.
unsafe
{
BitmapData bmData = bm.LockBits(...)
byte *bits = (byte*)pixels.ToPointer();
// Do stuff with bits
}
"固定"と"安全でない"が通常使用されるがinterop、余分な性能が必要です。ります。文字列になります。CopyTo()の使用、安全でないと固定する。
reinterpret_castスタイル行動
だビットを操ることができ非常に有
多くの高性能ハッシュコードの実装を使用UInt32のハッシュ値(この変化の簡素化).ました。純要Int32のための方法また迅速に変換すuint int.ていない事項については、実際の値は、すべてのビットの値が保存されている現状を解釈キャストが望まれる。
public static unsafe int UInt32ToInt32Bits(uint x)
{
return *((int*)(void*)&x);
}
このネーミングはモデルの BitConverter.DoubleToInt64Bits
を継続していたハッシュのような脈に変換するスタックベースの構造体へのバイト*容易な利用のたバイトのハッシュ機能
// from the Jenkins one at a time hash function
private static unsafe void Hash(byte* data, int len, ref uint hash)
{
for (int i = 0; i < len; i++)
{
hash += data[i];
hash += (hash << 10);
hash ^= (hash >> 6);
}
}
public unsafe static void HashCombine(ref uint sofar, long data)
{
byte* dataBytes = (byte*)(void*)&data;
AddToHash(dataBytes, sizeof(long), ref sofar);
}
安全でないもの(2.0以降)オペレーションダイアログを使用しstackalloc.ことを確認することに非常に役立つ高性能な状況が一変数の長さの配列に様々な取り組みが行われてい空間が必要です。
これらすべての使用もしっかり"だけにアプリケーションの場合は本当にニーズのパフォーマンス"として不適切なで一般的に使用されるが、時にはならないかもしれませんが必要です。
固定に必要な場合にinteropとつかの有用なポリシー機能(多くがcスタイル配列または文字列です。などだけでなくパフォーマンス上の理由が正しいものがinteropざいます。
安全でないに役立つ(例)くピクセルデータの画像を使って、迅速LockBits.パフォーマンスの向上に渡ってこの利用管理APIはつきません。
また固定の際のアドレスが渡されたC DLL.以降、DLLを維持している内部のポインタの全機能を呼び出し、すべての地獄もゆったりの場合はGC圧縮ヒープの移動ものです。
と思い、安全でないコードを使用したい場合はアクセスも外します。NETランタイム時において、打ち出されている。-で管理されていないコード(ごみ収集する。この原話のWindows APIおよびすべてのジャズです。
これからのデザイナー。NETフレームワークが良い仕事をカバーの問題空間の確に管理されたコードは"環境ですべて行うことが可能伝統などC++アプローチできない、安全でないコードポインタ.っている場合には、安全でない固定機能があります。思っ例が安全でないコードが必要、でも実はな点ですね。:)