Mig*_*uel 17 c# binary performance serialization
我正在编写一个C#应用程序,需要在启动时读取大约130,000(String,Int32)对到Dictionary.这些对存储在.txt文件中,因此很容易被任何人修改,这在上下文中是危险的.我想问一下是否有办法保存这个词典,以便可以合理安全地存储信息,而不会在启动时失去性能.我尝试过使用BinaryFormatter
,但问题是原始程序在启动时需要125ms到250ms来读取txt中的信息并构建字典,反序列化生成的二进制文件需要2s,这本身并不太多但与原始性能相比,速度降低了8-16倍.
注意:加密很重要,但最重要的应该是从磁盘保存和读取字典的方法 - 可能来自二进制文件 - 而不必在每一行上使用Convert.ToInt32,从而提高性能.
Mar*_*ath 26
有趣的问题.我做了一些快速测试,你说得对 - BinaryFormatter出乎意料地慢:
当我使用逗号分隔值的StreamReader/StreamWriter对其进行编码时,我得到了:
但后来我尝试使用BinaryWriter/BinaryReader:
代码看起来像这样:
public void Serialize(Dictionary<string, int> dictionary, Stream stream)
{
BinaryWriter writer = new BinaryWriter(stream);
writer.Write(dictionary.Count);
foreach (var kvp in dictionary)
{
writer.Write(kvp.Key);
writer.Write(kvp.Value);
}
writer.Flush();
}
public Dictionary<string, int> Deserialize(Stream stream)
{
BinaryReader reader = new BinaryReader(stream);
int count = reader.ReadInt32();
var dictionary = new Dictionary<string,int>(count);
for (int n = 0; n < count; n++)
{
var key = reader.ReadString();
var value = reader.ReadInt32();
dictionary.Add(key, value);
}
return dictionary;
}
Run Code Online (Sandbox Code Playgroud)
正如其他人所说,如果您担心用户篡改文件,加密而不是二进制格式化是前进的方向.
归档时间: |
|
查看次数: |
19686 次 |
最近记录: |