olarak kullanmak için Protobuf-net'i kullanın Veriyi diske kaydetmek ve yüklemek için Protobuf-net kullanmaya çalışıyorum ancak takılıyorum.Büyük veri dosyalarını IEnumerable
İhtiyacım olan bir varlık portföyüm var ve bunu olabildiğince hızlı bir şekilde yapmak istiyorum. Bir CSV'den okuyabiliyorum, ancak ikili bir dosya kullanmak daha hızlı olurdu, bu yüzden Protobuf-Net'e bakıyorum.
Tüm varlıkları belleğe sığamıyorum, bu yüzden onları akışa almak istiyorum, hepsini belleğe yüklemiyorum.
Yapmam gereken şey, IEnumerable olarak geniş bir kayıt kümesini ortaya koymaktır. Bu Protobuf-Net ile mümkün mü? Birkaç şey denedim ama koşmayı başaramadım.
Serileştirme çalışıyor gibi görünüyor, ancak onları tekrar okuyamadım, 0 varlığını geri aldım. Birisi bana doğru yönde işaret edebilir mi lütfen? Serializer
sınıfındaki yöntemlere bakıldı, ancak bu durumu kapsayan herhangi bir dosyayı bulamıyor. Ben Protobuf-net tarafından desteklenen bu kullanım çantası? Bu arada V2 kullanıyorum. peşin
sayesinde
Gert-Jan İşte denedim bazı örnek kod:
public partial class MainWindow : Window {
// Generate x Assets
IEnumerable<Asset> GenerateAssets(int Count) {
var rnd = new Random();
for (int i = 1; i < Count; i++) {
yield return new Asset {
ID = i,
EAD = i * 12345,
LGD = (float)rnd.NextDouble(),
PD = (float)rnd.NextDouble()
};
}
}
// write assets to file
private void Write(string path, IEnumerable<Asset> assets){
using (var file = File.Create(path)) {
Serializer.Serialize<IEnumerable<Asset>>(file, assets);
}
}
// read assets from file
IEnumerable<Asset> Read(string path) {
using (var file = File.OpenRead(path)) {
return Serializer.DeserializeItems<Asset>(file, PrefixStyle.None, -1);
}
}
// try it
private void Test() {
Write("Data.bin", GenerateAssets(100)); // this creates a file with binary gibberish that I assume are the assets
var x = Read("Data.bin");
MessageBox.Show(x.Count().ToString()); // returns 0 instead of 100
}
public MainWindow() {
InitializeComponent();
}
private void button2_Click(object sender, RoutedEventArgs e) {
Test();
}
}
[ProtoContract]
class Asset {
[ProtoMember(1)]
public int ID { get; set; }
[ProtoMember(2)]
public double EAD { get; set; }
[ProtoMember(3)]
public float LGD { get; set; }
[ProtoMember(4)]
public float PD { get; set; }
}
Üzgünüm Yardım- birkaç gün uzakta zorunda kaldı. Cevabı bulduğuna sevindim. –
hiçbir endişe çok uzun sürmedi. Her şeyi (yeniden) yazmak için büyük bir teşekkür! – gjvdkamp