在 C# 3.5 中以下最快的方法是什么:
- 遍历目录中的文件
- 读取文件的记录(固定长度为 247 个字符)
- 将每条记录的固定长度字符串转换为 Struct 或 Class。
谢谢
在 C# 3.5 中以下最快的方法是什么:
谢谢
这样写起来会比较快:
var myStructs =
from file in Directory.GetFiles(".", "*.*", SearchOption.TopDirectoryOnly)
select ConvertFileToStructs(File.ReadAllText(file));
如果这是最快的方式,性能方面?可能不会,但不会有很大的不同。影响性能的是 ConvertFileToStructs() 函数中反序列化的实现。但要回答这个问题,我们需要知道您的文件的具体格式。
只需阅读您的评论。我建议进行以下解析:
List<MyStruct> ConvertFileToStructs(string content, int[] mapping)
{
var records = new List<MyStruct>();
int length = content.Length();
for(int i = 0; i < length; i += 247)
records.Add(ConvertRecordToStruct(content.Substring(i,247), mapping));
return records;
}
MyStruct ConvertRecordToStruct(string record, int[] mapping)
{
MyStruct s;
s.Field1 = record.Substring(mapping[0], mapping[1]);
//set other fields
return s;
}
这段代码可能会针对性能进行优化,但我认为它不会显着改变事情,特别是因为涉及到磁盘的 I/O 并且 Substring() 非常快(请参阅http://dotnetperls.com/substring)。当然,您必须在您的机器上进行测试。
处理文件的自定义类
class customFile
{
string fileText;
public string FileText
{
get { return fileText; }
set { fileText = value; }
}
}
阅读所有文本
string[] filePaths = Directory.GetFiles(dirPath);
List<customFile> customFiles = new List<customFile>();
foreach (string file in filePaths)
{
customFiles.Add(new customFile { FileText = File.ReadAllText(file) });
}