0

16 進文字列をバイト配列に変換してから、ファイルに書き込む必要があります。以下のコードは3 秒の遅延を与えます。16 進数の下 には、長さ 1600 の 16 進文字列があります。これを高速化する他の方法はありますか?

        Stopwatch sw = new Stopwatch();
        sw.Start();
        for (int i = 0; i < 5000; i++)
        {

            FileStream objFileStream = new FileStream("E://CRec Correcting Copy//Reader//bin//Debug//Files//Raw Data//a123.txt", FileMode.Append, FileAccess.Write);
            objFileStream.Seek(0, SeekOrigin.End);
            objFileStream.Write(stringTobyte(hex), 0, stringTobyte(hex).Length);
            objFileStream.Close();
        }
        sw.Stop();
        Console.WriteLine(sw.ElapsedMilliseconds);

stringTobyte は、16 進文字列をバイト配列に変換するメソッドです。

public static byte[] stringTobyte(string hexString)
    {
        try
        {
            int bytesCount = (hexString.Length) / 2;
            byte[] bytes = new byte[bytesCount];
            for (int x = 0; x < bytesCount; ++x)
            {
                bytes[x] = Convert.ToByte(hexString.Substring(x * 2, 2), 16);
            }
            return bytes;
        }
        catch
        {
            throw;
        }
    }

遅延が発生している場所を教えてください。

4

2 に答える 2

1

あなたは複雑な方法を考えています。まず、カスタム関数でバイト配列に変換する必要はありません。System.Text.UTF8Encoding.GetBytes(string)あなたのためにそれをします!また、ここではストリームは必要ありませんFile.WriteAllBytes(string, byte[])。方法を見てください。

次に、次のようになります。

System.IO.File.WriteAllBytes("E://CRec Correcting Copy//Reader//bin//Debug//Files//Raw Data//a123.txt", new System.Text.UTF8Encoding().GetBytes(hex));

または複数行のバージョン、もしあなたが主張するなら:

string filePath = "E://CRec Correcting Copy//Reader//bin//Debug//Files//Raw Data//a123.txt";
System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();
byte[] bytes = encoder.GetBytes(hex);
System.IO.File.WriteAllBytes(filePath, bytes);
于 2013-01-14T12:41:33.453 に答える
0

わお。最初にこれを行います:

objFileStream.Write(stringTobyte(hex), 0, stringTobyte(hex).Length);


byte[] bytes = stringTobyte(hex);
objFileStream.Write(bytes , 0, bytes.Length);
于 2013-01-14T12:25:51.293 に答える