Ini pada dasarnya adalah aplikasi pencatatan / penghitungan yang menghitung jumlah paket dan menghitung jenis paket, dll. Pada jaringan obrolan P2P. Ini setara dengan sekitar 4-6 juta paket dalam periode 5 menit. Dan karena saya hanya mengambil "snapshot" dari informasi ini, saya hanya menghapus paket yang lebih lama dari 5 menit setiap lima menit. Jadi maksimum item yang akan ada dalam koleksi ini adalah 10 hingga 12 juta.
Karena saya perlu membuat 300 koneksi ke superpeers yang berbeda, ada kemungkinan setiap paket mencoba untuk dimasukkan setidaknya 300 kali (yang mungkin mengapa menyimpan data ini dalam memori adalah satu-satunya pilihan yang masuk akal).
Saat ini, saya telah menggunakan Kamus untuk menyimpan informasi ini. Tetapi karena sejumlah besar item yang saya coba simpan, saya mengalami masalah dengan tumpukan objek besar dan jumlah penggunaan memori terus bertambah seiring waktu.
Dictionary<ulong, Packet>
public class Packet
{
public ushort RequesterPort;
public bool IsSearch;
public string SearchText;
public bool Flagged;
public byte PacketType;
public DateTime TimeStamp;
}
Saya telah mencoba menggunakan mysql, tetapi tidak dapat mengikuti jumlah data yang perlu saya masukkan (sambil memeriksa untuk memastikan itu bukan duplikat), dan itu saat menggunakan transaksi.
Saya mencoba mongodb, tetapi penggunaan cpu untuk itu gila dan tidak menjaga keduanya.
Masalah utama saya muncul setiap 5 menit, karena saya menghapus semua paket yang lebih dari 5 menit, dan mengambil "snapshot" dari data ini. Karena saya menggunakan query LINQ untuk menghitung jumlah paket yang berisi jenis paket tertentu. Saya juga memanggil kueri () kueri yang berbeda pada data, di mana saya menghapus 4 byte (alamat ip) dari kunci keyvaluepair, dan menggabungkannya dengan nilai port requesting dalam Nilai keyvalupair dan menggunakannya untuk mendapatkan jumlah yang berbeda dari rekan dari semua paket.
Aplikasi saat ini melayang-layang sekitar 1,1GB penggunaan memori, dan ketika sebuah snapshot disebut itu bisa sejauh menggandakan penggunaan.
Sekarang ini tidak akan menjadi masalah jika saya memiliki jumlah ram yang gila, tetapi vm yang saya jalankan terbatas pada 2GB ram saat ini.
Apakah ada solusi mudah?