Dell XPS15にメモリを増設した

2011年の初めにXPS 15 ノートパソコン | Dell 日本を購入し、購入時は4GBのメモリ容量でしたが、そろそろメモリを8GBに増設しようと思い、Dellのサイトでメモリの規格を調べました。
XPS 15 ノートパソコン | Dell 日本を見ると、メモリ欄に「4GB (4GBx1) DDR3 SDRAM 1333MHz メモリ」と書かれていたので、これと同規格のメモリを購入する事にしました。

出来ればDell純正のメモリが欲しかったので、メモリ | Dell 日本で確認すると、DELL Dell – デル純正メモリ 4GB PC3-10600 (1333MHz), 204 pin, NonECC, SODIMM : メモリ | Dell 日本が見つかりました。

XPS15購入時はメモリ増設(4GB)のオプションが+10,000円近くもしたのですが、2011年12月時点では3,000円以下の価格になっていたので、純正でこの値段なら魅力的だったので購入しました。

なおメモリは同じ型番のものを2枚指した方が良いとされているので、4GB×2枚購入して、既存のメモリを外して、購入した2枚を指すべきですが、予算の都合上、1枚だけ購入して既存のメモリ(別型番)を指す事にしました。

購入後2週間近く経って、ようやくメモリが届きました。

中には親切にメモリの取り付け方法が書かれた説明書が入っていました。

早速XPS15を裏返しにして、ドライバでネジを緩めてふたを開けると、メモリの空きソケットが1つ。

余計な障害物も無かったので、すぐにメモリを挿して、後はふたを閉めて、ネジも締めて作業完了。
わずか10分ほどで出来てしまいました。

その後PCを起動し、「コンピュータ」→「プロパティ」を開いてPCが8GBのメモリを認識しているか確認。

体感速度はやや速くなったかな、という程度ですが、画像現像ソフト「SILKYPIX Developer Studio 4.0」を使うと、速さを実感できます。
今後も画像編集や、動画編集などXPS15をガンガン使っていこうと思います。

バイナリデータを検索する方法(vb.net)

画像データなどのバイナリ化されたデータから特定の16進コードを検索する方法を紹介します。
今回のケースは、下記の様なバイナリデータから、「my-hobby」という文字列を含み、かつ「my-hobby」の後に「&HFF」(16進コードFF)が付くバイナリデータの最初のインデックスを取得する方法です。

検索対象とするバイナリデータの情報は下記の通りです。

上記の赤枠部分が今回検索したい箇所です。

ソースは下記の通り
[vbnet]
Imports System.IO

Dim ByteArray As Byte()
Dim TargetByte As Byte() = {&H6D, &H79, &H2D, &H68, &H6F, &H62, &H62, &H79, &HFF} ‘「my-hobby」を16進化したコードをセット(最後はFF)
Dim i As Integer
Dim ByteIndex As Integer
Dim StartIndex As Integer
Dim HitFLG As Boolean ‘True:検索文字列ヒット

ByteArray = File.ReadAllBytes(ファイルパス) ‘.net Framework 2.0以上対応
StartIndex = 0

Do
ByteIndex = Array.IndexOf(ByteArray, TargetByte(0), StartIndex) ‘最初の一文字を検索する
If ByteIndex < 0 Or StartIndex + TargetByte.Length – 1 >= ByteArray.Length Then
ByteIndex = -1
HitFLG = False
Exit Do ‘最初の文字が見つからなかった場合、またはStartIndexの位置がバイト配列の最後まで到達した場合は処理終了
Else
HitFLG = True ‘一時的にヒットの状態にする
End If

For i = 1 To TargetByte.Length – 1 ‘残りの文字(2文字目以降)も検索する
If ByteArray(ByteIndex + i) <> TargetByte(i) Then
HitFLG = False ‘1文字でも合致しなかったらFalseにセット
Exit For
End If
Next

If HitFLG = True Then
Exit Do ‘全ての文字がヒットしたら処理を抜ける
Else
StartIndex = ByteIndex + 1 ‘ヒットしなかった場合は、検索開始位置を1バイトずらして再度検索
End If
Loop

Console.Write(ByteIndex) ‘該当した文字列の1文字目の配列インデックスを出力する。-1の場合は該当する文字が無かった事を意味する。
[/vbnet]

上記の処理を実行すると、272 が出力されます。
なお、上記処理はInteger型の上限を超える容量のファイルを扱う事は出来ません。

ちなみに上記の検索アルゴリズムはクヌース-モリス-プラット法 – Wikipediaという方式に似ていますが、バイナリデータの保存形式、使用用途に応じて検索アルゴリズムを変えていく事で、より高速な検索が出来るのでは無いかと思います。
Category:検索アルゴリズム – Wikipediaを見ると、世の中には色んな検索アルゴリズムがある事が分かります。

まぁこの辺を意識しなくても検索できる、.net Frameworkが出来てくれると一番嬉しいんですが。。。