rubyで文字列のバイト単位での切り出し(UTF8→SJIS→UTF8)

一応以下で動くんだけど・・・・・
余りバイトの処理をNKFに任せていいのかな????

def sjis_byte_cut(utf_str,cut_byte_size)
  str_shiftjis  = NKF.nkf('-xWs', utf_str)
  return NKF.nkf('-xSw', str_shiftjis[0,cut_byte_size])
end

ちなみにパフォーマンスですが、うちの環境で(Core2Duo(2.2GHz))100万回実行してだいたい10秒ぐらいかかりました
↓↓↓↓↓↓

1000000.times{
  sjis_byte_cut("奈良美智アンケート応募中",11) #=>奈良美智アンケ
}

追記

一応ちゃんとベンチとってみた(ライブラリ名は気にしないでw)

環境

  Model Name:	MacBook Pro
  Model Identifier:	MacBookPro3,1
  Processor Name:	Intel Core 2 Duo
  Processor Speed:	2.2 GHz
  Number Of Processors:	1
  Total Number Of Cores:	2
  L2 Cache:	4 MB
  Memory:	4 GB
  Bus Speed:	800 MHz

コード

$KCODE='u'

require 'benchmark'
require 'rubygems'
require 'km_string'

$n = 10000

st1 = "ひらがな漢字カタカナ1234まじり"
st2 = st1 * 100

p KmString::sjis_byte_cut(st1,5)
p KmString::sjis_byte_cut(st1,13)
p KmString::sjis_byte_cut(st1,16)
p KmString::sjis_byte_cut(st1,18)
p KmString::sjis_byte_cut(st1,21)
p KmString::sjis_byte_cut(st1,22)

Benchmark.bm do |job|
  job.report {$n.times do; KmString::sjis_byte_cut(st1,7); end}
  job.report {$n.times do; KmString::sjis_byte_cut(st2,7); end}
  job.report {$n.times do; KmString::sjis_byte_cut(st2,277); end}
end

結果

"ひら"
"ひらがな漢字カ"
"ひらがな漢字カタカナ"
"ひらがな漢字カタカナ12"
"ひらがな漢字カタカナ1234"
"ひらがな漢字カタカナ1234ま"
      user     system      total        real
  0.090000   0.000000   0.090000 (  0.087741)
  2.370000   0.020000   2.390000 (  2.405928)
  2.550000   0.010000   2.560000 (  2.561285)