忍者ブログ

青空を映す皿

Rustの処理時間が遅く、改善出来ない無能

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Rustの処理時間が遅く、改善出来ない無能

Rustへ移植

C#で細かいツールを作ってたので、Rustに移植していく作業中。
仕事の合間にやってるので、なかなか進まない。
Rust独自の所有権エラー出まくり。

処理速度が遅い

いくつかのツールを移植したんだけど、1個だけ、妙に遅い事に気づいた。
ファイルサーバの特定フォルダ配下の更新情報を出力するツール。
4か所のフォルダ配下のファイル一覧を取得して、前回保存した一覧との差分を出力している。
差分処理はそこそこ早いんだけど、ファイル一覧取得が遅い。
C#ツールでは、23秒だが、Rustツールでは、62秒。
圧倒的に、遅い。

おかしい、C#と比べるとRustの方が速いはずなんだが。
所有権エラー回避のためのコードで、遅くなってる理由な気がする。

外部クレート使用

取り敢えず自作コードのファイル一覧部分のみ抜き出して、計測すると8秒くらいかかる、遅い。
walkdirクレートを使用してみると、4秒になった。早い。
jwalkクレートを使用していると、1秒になった。めっちゃ早い。

何故か遅くなる

これで問題解決~、とファイル一覧の部分をjwalkに変更してみると、103秒。
はぁ?
何で、遅くなる。
ファイル一覧以外の処理は、一緒なので、ファイル一覧が遅いの?
いや、そんなはずはない。

うー、分からん。
ファイル一覧以外のコードで、ヒープ確保している箇所を回避するように修正してみる。
Rustっぽい改修だ。
本来そうするべきなんだろうが、エラー回避のために、じゃんじゃんヒープ使ってる無能コード。
それでも、74秒。
何故、元の自作コードより遅くなるのだ。
ファイル一覧部分は、8秒から1秒になったはずなのに。
その他のコードは、同じなのに、何故だぁぁぁ。

敗北

結局、原因が分からず、そっと元の自作コードに戻しておいた。

そういえば、Rust製ripgrepは、最高速と言われていたけど、
ファイルサーバに対して使うと、agより遅かったんだよなぁ。
Windows上で、Windowsファイルサーバへのアクセスが遅いのかな?
Rustのメモリ確保は、Cより遅いという話だし(セキュリティ機能重視のため)、ループ内でヒープ確保しまくりだと、指数関数的に遅くなるのかも。

きっと、Rustの機能を使いこなせてないからだろうなぁ。
Cowとか使えると早くなるかもしれないけど、良く分からんので、手を出してない。
参照を使いこなしてないので、ライフタイムも使ってない。
参照使って、ヒープ確保処理を減らさないと、速度出ない気がする。
もう少し、Rustの勉強が必要だ。

拍手[0回]

PR

コメント

プロフィール

HN:
性別:
非公開

P R