質問

この質問があまりにも「適切な分野」ではないことを願います。そして、スタックフローの多くの人々と比較すると私は初心者であることを率直に言っておきます...

取り組んでいる AI プロジェクトの画像、音声、テキストのオブジェクト表現を比較したいと考えています。3 つの入力すべてを 1 つのデータ型に変換し、中央の比較アルゴリズムを使用して静的に確率の高い一致を判断したいと考えています。

このような比較を行うための「最速」のネイティブ .Net および SQL データ型は何ですか?.Net では、CLR での変換が最も少ないデータ型は何ですか?SQL の場合、最も速く「CRUD」できるのはどの型ですか?

.Net ではバイト、SQL では整数を考えていましたが、整数は 1 次元の概念であるという問題が生じます。画像と音声は SQL ではなくファイル システム内で処理されるべきだと思いますか? そうだと思います…

FWIW TrossenRobotics.com で購入した部品からロボットを構築しています

役に立ちましたか?

解決

あなたは大きなバイナリオブジェクト間の頻繁な比較を行うために必要がある場合は、

個人的に、私はオブジェクトをハッシュし、ハッシュを比較します。

ハッシュが一致しない場合は、

、あなたは(ほとんどの場合であるべき)オブジェクトが一致していないことを確認することができます。

ハッシュが一致しない場合は、

、あなたは、実際のオブジェクトを比較するために、より長いルーチンを開始することができます。

あなたが頻繁にこれらのオブジェクトを比較している場合は、

だけではこの方法はかなりあなたのパフォーマンスを向上させる必要があります。

他のヒント

のデータ型の速度は測定することが少し難しいです。あなたは、32ビットオペレーティングシステムまたは64ビットを使用している場合、それは大きな違いになります。どうして?それは、このデータを処理することができる速度を決定しているので。 一般的に、32ビットシステムでは、内部32ビット(INT16、INT32、チャー、バイト、ポインタ)を取り付けて、すべてのデータタイプが同じ速度として処理されます。あなたが処理するデータの多くを必要とする場合は、それらを処理するためにあなたのCPUのために4バイトごとのブロックで、それを分割するのがベストです。

あなたがディスクにデータを書いているとき、

しかし、データ速度は多くの要因に依存する傾向があります。お使いのディスクデバイスは、いくつかのUSBポート上にある場合は、すべてのデータは、このように、それはバイトの後のバイトになり、シリアライズされます。最小のデータブロックが最小のギャップを残すだろうが、その場合には、大きさは、あまり重要ではありません。 (CPUのパフォーマンスのための4バイトの倍数に整列あなたの記録では、あなたのフィールドを持ちながら、パスカルのような言語では、あなたは、パフォーマンスを最適化するために、ストリーミングデータのこの種のパックレコードを使用すると思います。) 正規ディスクが大きなブロックにデータを格納します。読み取り/書き込み速度を向上させるために、あなたはできるだけコンパクトあなたのデータ構造を作ることを好むだろう。しかし、パフォーマンスを処理するためにそれらを4つのバイト境界に配置したが、より効果的です。

どの私は一度NTFSディスク上の圧縮を使用する方法について誰かとの議論があったことを思い出します。それははるかに少ないデータ・ブロックを読み込む必要があったので、私はそれはそれは、同じデータ・ブロックを解凍するために多くの処理をしなければならなかったものであっても、NTFSパーティションを圧縮することは、実際にコンピュータのパフォーマンスを向上させることができることを証明するために管理します。

パフォーマンスを向上させるために、あなただけの最も弱い(最も遅い)リンクを見つけ、そこに開始する必要があります。それが最適化されていますしたら、別の弱いリンクがあるでしょう...

個人的に、私はあなたがバイト配列を使用してオフに最高だと思います。あなたは簡単にバッファにファイルを読み込んで...と、バッファからあなたが比較を行うことができますバイト配列にすることができます。

私の知る限りリコールとして、膨大なパフォーマンスの面で、のInt32型は.NETの高速なデータ型の間です。しかし、それはあなたのアプリケーションの中で最も適しているかどうかと言うことはできません。

.NET に何かを取り込む前に、LEN 関数を使用して SQL Server 内のデータの長さを確認する必要があります。長さが異なる場合は、2 つのオブジェクトが異なることがすでにわかります。これにより、SQL Server からクライアント アプリケーションに大量の不要なデータを削除する必要がなくなります。

また、CHECKSUM 関数を使用してハッシュ コードを (バイナリ データとは別の列に) 保存することをお勧めします (http://msdn.microsoft.com/en-us/library/aa258245(SQL.80).aspx)。これは、SQL Server 2005 以降を使用しており、データを varbinary(MAX) として保存している場合にのみ機能します。繰り返しになりますが、ハッシュコードが異なれば、バイナリデータも確実に異なります。

SQL Server 2000 を使用している場合は、「image」データ型を使用することになります。

image または varbinary(MAX) は両方とも、クライアント上の byte[] オブジェクトに適切にマップされますが、SQL Server 2008 を使用している場合は、データを FILESTREAM データ型として保存するオプションがあります (http://blogs.msdn.com/manisblog/archive/2007/10/21/filestream-data-type-sql-server-2008.aspx).

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