■No74690 (ぽん吉 さん) に返信
> バイナリデータを取得して文字列に変換しています。
> タイマーをセットしていて、loopさせています。
> loopさせててもフリーズしない方法とかありますでしょうか?
私が言ったループとは以下のようなイメージです。
while(true) {
System.Text.Encoding.GetEncoding(932).GetString(TargetByte2);
}
この場合、メッセージループに戻らなくなるのでフリーズするのは自然ですが、こうではなく、タイマーによる秒単位での繰り返し、
つまり処理から抜けて 0.5 秒ぐらいは次の処理までに余裕がある状態と考えて相違ないでしょうか。
> loopさせてなくても何回も処理をするとフリーズします。
> どんなバイト列でもだいたいフリーズすると思います。
「思います」ではなくきちんと検証しましょう。
思い込みがよくないので、自分の考えが当たっているかどうかを新しく作ったプロジェクトで検証することは重要です。
また、デバッグ実行で「フリーズしたと思われる状態」に陥ったのであれば、Visual Studio のデバッグメニューからすべて中断を選び、
どこを実行しているのかを確認しつつ、ステップ実行でも進まないのかどうかを確認してください。
もし、遅くなっているだけで処理が進んでいるのであれば、なぜ遅くなっているかを調べてください。
なお、手元の Windows 8.1 Update (x64) 環境で以下のようなコードを実行すると 6 秒程度で終了しました。
static void Main(string[] args)
{
var encoding = Encoding.GetEncoding(932);
var TargetByte2 = encoding.GetBytes("日本語テスト");
var sw = Stopwatch.StartNew();
for (int i = 1; i <= 100000000; i++)
{
string s = encoding.GetString(TargetByte2);
}
Console.WriteLine(sw.Elapsed);
}
|