2012-02-27 9 views
3

C#のWindowsアプリケーションでは、HEX文字列を処理します。 1つのHEX文字列には5〜30のHEXパートがあります。C#Int vs ByteパフォーマンスとSQL Int vsバイナリパフォーマンス

07 82 51 2A F1 C9 63 69 17 C1 1B BA C7 7A 18 20 20 8A 95 7A 54 5A E0 2E D4 3D 29 

現在、私はこの文字列を取り、​​を使用して整数のN数にそれを解析します。次に、これらのint値をデータベースに追加します。これらの値をデータベースから抽出すると、それらをIntsとして抽出し、その後それらをHEXストリングに変換し直します。

これらの文字列をバイトに変換し、それらをデータベース内のバイナリデータ型として追加する方がよいでしょうか?

EDIT:

5-30 HEX部品はすべての部品が個々の部品との1つのレコードを構成する特定のテーブルに対応します。たとえば、5つのHEX値を持つ場合、1つのレコードの5つの別々の列に対応します。

EDIT:

(ごめん)を明確にする:

私は9つのテーブルを持っています。各表には、設定された数の列があります。

TABLE1:30

表2:18

表3:18

表4:18

表5:18

表6:13

表7:27

table8:5

table9:11

すべての表のこれらの列の各々は、特定のHEX値に対応します。

例えば、私のアプリは、1つの文字列形式で13個の16進数のコンポーネントの "ペイロード"を受け取るでしょう:07 82 51 2A F1 C9 63 69 17 C1 1B BA C7。現在、この文字列を受け取り、個々のHEXコンポーネントを解析し、intに変換してint配列に格納します。私はこれらのint値を取得し、データベースの対応するテーブルとカラムに格納します。私がこれらの値を読むと、それらをintとして取得し、それをHEX文字列に変換します。

私は、HEX文字列をバイト配列に変換し、バイトをSQLバイナリ変数型として格納する必要があると思います。

+0

VARBINARY()誰ですか? – MatBailie

+0

あなたのデータモデルは見えません。各 "16進数の部分"は正確な意味を持っていますか(常に特定の表と特定の列を参照します)、または表と列の間を "さまよう"ことができますか?私は最初に解決する必要があるより深い問題があるかどうかを確かめようとしています。 –

+0

@BrankoDimitrijevic私の編集を確認してください、私は私のデータモデルを明確にしました。 – Mausimo

答えて

4

パフォーマンスの点では、もちろんテスト両方の方法で行う必要があります。

ただし、可読性の場合、これは単なるデータであれば、確かにバイト配列を使用することをお勧めします。 の場合、実際にはは整数のシーケンスを表すことを意図していますが、それは問題ありませんが、なぜ4バイト整数の集合を使用して任意のバイト配列を表現するのですか?それは何か他のものとうまく適合しない:

  • をご入力データが4バイト
  • の倍数でない場合は、パディングを考慮しなければならないことは、読み書きの観点で動作するように痛みますストリーム
  • とのデータがそれを使用すると、データベース内の整数を保存しているかは明らかではないのですが、私はあなただけで全部

を保存しようとしている場合は、より効率的にブロブを期待しました私はより多くのコードを書くことをお勧めしますnatural方法は、データを実際に表現しようとしているものに近づけておき、パフォーマンスを測定することです。それが十分であれば、それ以上見る必要はありません。そうでない場合は、調整のための良い基礎を持っています。

+1

@Mausimo:なぜ5列のテーブルがありますか?列がすべて異なる意味を持つ場合、それはもっと意味があります。何が起きているのかはまだ分かりません。 –

+0

私の編集を参照してください詳細を追加しました。お返事ありがとう – Mausimo

1

はい、これまでにあります。多くの行を挿入するのは、より大きな行を挿入するよりもはるかに悪いです。

1

データモデルは、多くの場合、あなたは書き込みにしたいだけの方法にはない依存しますが、またあなたがを見つけて、データを読みたいですか。

いくつかの注意事項:

  • あなたは「HEX部」特定を見つけるする必要がある場合は、さえないときは「HEX文字列」、各「HEX部」の開始時別の行にある必要がありますので、データベースインデックスがそれを受け取ることができます。
  • DBMS/APIによっては、をBLOBまたはバイト配列で検索することは容易ではない場合があります。これは、接頭辞でない "HEXパート"をロードしたり、 "HEXストリング"の途中で修正を行う場合に重要です。
  • "HEX文字列"をPRIMARY、UNIQUEまたはFOREIGN KEYにする必要がある、または接頭辞で検索する必要がある場合は、通常は実際にインデックス可能なデータベースタイプが必要です(BLOBは一般的ではありませんが、 DBMSは、である小さなバイト配列の代替タイプを持っています。

すべてでは、バイト配列がおそらく必要ですが、上記の考慮事項に注意してください。

+0

ありがとうございます。私の編集を見てください。 – Mausimo