C# 使用UDE检测字符集并将文本转换为字符串-对性能的影响

C# 使用UDE检测字符集并将文本转换为字符串-对性能的影响,c#,encoding,C#,Encoding,我对一件事很好奇。我正在使用以下代码打开文件并使用正确的编码读取它-UDE是Mozilla Universal Charset Detector 1.1.0。我不知道输入字符串文件将是什么,但我可以尝试猜测 然而,我做了两次同样的事情——首先我需要从文件中创建文件流,因为这是UDE所接受的,然后我需要将内容放入字符串中进行处理。我尝试将文件流发送到流阅读器,然后发送到字符串,但这会打乱行的顺序 因此,我最终得到了File.ReadAllText(sttFile,enc)我想知道这是否可以做得更好

我对一件事很好奇。我正在使用以下代码打开文件并使用正确的编码读取它-UDE是Mozilla Universal Charset Detector 1.1.0。我不知道输入字符串文件将是什么,但我可以尝试猜测

然而,我做了两次同样的事情——首先我需要从文件中创建文件流,因为这是UDE所接受的,然后我需要将内容放入字符串中进行处理。我尝试将文件流发送到流阅读器,然后发送到字符串,但这会打乱行的顺序

因此,我最终得到了
File.ReadAllText(sttFile,enc)
我想知道这是否可以做得更好/更快,如果有数百个大型文本文件,会对性能产生什么影响

            FileStream fs = File.OpenRead(sttFile);
        Ude.CharsetDetector cDet = new Ude.CharsetDetector();
        cDet.Feed(fs);
        cDet.DataEnd();
        Encoding enc = Encoding.UTF8;
        try
        {
            enc = Encoding.GetEncoding(cDet.Charset);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Failed to obtain encoding of the file to {0}. Corrupted characters may occur.", cDet.Charset);
        }

        //this messes up the lines order??
        //StreamReader sr = new StreamReader(fs, enc);
        //string fileContent = sr.ReadToEnd();

        string fileContent = File.ReadAllText(sttFile, enc);

欢迎任何意见或建议,谢谢

与其他操作相比,再次打开文件所需的时间可以忽略不计。这样我就不用担心了。您应该致力于编写最清晰的代码,除非性能是一个实际的、可测量的问题。在本例中,最清晰的是
File.ReadAllText

如果您真的想重用流,只需将
fs.Position
重置为0即可

最后,应该在
File.OpenRead
周围放置一个
using
子句,以确保文件被关闭。您当前的代码可能会让它保持打开状态,除非UDE关闭它(我怀疑它是否关闭)。具体而言:

var enc = Encoding.UTF8;
using (var fs = File.OpenRead(sttFile))
{
    ... rest of the code ...
}

string fileContent = File.ReadAllText(sttFile, enc);

把台词的顺序弄乱了怎么办?可能对
cDet.DataEnd()
的调用读取流
fs
,因此当您再次使用它时,起始位置是关闭的?是的,这一定是真的。行的顺序看起来是随机的,但当我使用fs.Position=0时,文件显示正确!嗯,性能在这里有点重要,所以如果性能提高5%或10%,那么我宁愿选择更快的option@Bartosz它可能会节省固定的时间,每次调用不到1毫秒,而不是自动检测和读取文件所需的时间百分比。