【发布时间】:2011-05-24 11:00:35
【问题描述】:
我有一个实现异步 SOAP 的应用程序。每 50-100 毫秒,我将收到转换为 SortedList<double,double> 对象的数据。我还有一个预定义的IList<double>,其中包含SortedList 中的所有可能键。
我需要遍历IList 并检查SortedList 是否包含该密钥。如果是,我将该值写入 csv 字符串;如果没有,我将 0.0 写入 csv 字符串。
注意: IList 有 400 个键。 SortedList 一般会比 400 小很多,最多 100 左右。
string MyText = timestamp.ToString("HH:mm:ss");
for (int i = 0; i < AllKeys.Count; i++)
{
double info;
if (MySortedList.TryGetValue(AllKeys[i], out info))
{
MyText += "," + info;
}
else
{
MyText += ",0.0";
}
}
MyText += "\n";
File.AppendAllText(filePath, MyText);
我目前正在使用上述代码创建 csv 字符串,然后再将其写入我的文件。但是,我发现这段代码落后于我的应用程序。
我需要帮助提高效率,以便存储传入数据的时间低于 50 毫秒。一些额外的事情:
- 我不必写入 csv 文件,我只需要快速存储数据。 (我可以稍后从序列化文件转换为我的 csv 文件)
- 我曾考虑过使用 LINQ,但我对查询不熟悉,不知道它的效率会提高多少
编辑:我已经通过使用 Conrad 提出的制作 StreamWriter 对象的建议解决了我的性能问题。我只是创建了一个静态 StreamWriter 对象,并在通信终止时关闭 StreamWriter 之前将我的所有文本写入它。
【问题讨论】:
-
对于初学者,请尝试使用 StringBuilder。这种事情通常比原生连接快得多(或者我听说过)。还有,你不是先说IList有SortedList的所有可能键,然后你说你需要检查它是否有吗?我错过了什么吗?
-
我有一个 IList,它有 400 个双精度值,它们是 SortedList 中所有可能的键。我收到的 SortedList 数据具有与其中一些键(不是全部)关联的值。例如,IList 有 (1,2,3,4),而 sortedlist 有 ([1,6.6], [3,7.9]),我的 csv 字符串将是“6.6, 0.0, 7.9, 0.0”跨度>
标签: c# file csv io sortedlist