Скорость обработки данных - C# (190401)
Формулировка задачи:
Подскажите пожалуйста что можно использовать для высокой скорости обработки данных, акцесс меня честно говоря не очень устроил, он начал серьезно залипать на 10тыс записях в таблице, а мне нужно практически мгновенно получать ответ на запрос...
Необходимые мне действия которые должны выполняться максимально быстро
1) проверка наличия записи в таблице
2) извлечение конкретных ячеек
3) ну и наконец добавление новых записей(хоть и не критично).
Решение задачи: «Скорость обработки данных»
textual
Листинг программы
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace ConsoleApplication198
{
internal class Program
{
static void Main(string[] args)
{
//проверяем наличие файла
var file = "c:\\DataItems.bin";
if (File.Exists(file))
DB.Instance.Load(file);//загружаем данные
else
{
//заполняем таблицу случайными данными
var rnd = new Random(1);
for(int i=0;i<10000;i++)
DB.Instance.DataItems.Add(new DataItem(){Id1 = rnd.Next(400), Id2 = rnd.Next(400), Name = "Name" + i});
}
//проверяем наличие записи (99, 44), засекаем время доступа
var sw = Stopwatch.StartNew();
var exists = DB.Instance.DataItems.Contains(new DataItem() {Id1 = 99, Id2 = 44});
sw.Stop();
Console.WriteLine("Result: {0}, Search Time: {1}", exists, sw.Elapsed);
//сохраняем БД
DB.Instance.Save(file);
//
Console.ReadLine();
}
}
[Serializable]
class DataItem
{
public int Id1 { get; set; }
public int Id2 { get; set; }
public string Name { get; set; }
public override int GetHashCode()
{
return Id1 ^ Id2;
}
public override bool Equals(object obj)
{
if(obj is DataItem)
{
var item = obj as DataItem;
return item.Id1 == Id1 && item.Id2 == Id2;
}
return false;
}
}
[Serializable]
class DataItems: HashSet<DataItem>
{
public DataItems()
{
}
public DataItems(SerializationInfo info, StreamingContext context) : base(info, context)
{
}
}
class DB
{
public readonly static DB Instance = new DB();
public DataItems DataItems { get; private set; }
public DB()
{
DataItems = new DataItems();
}
public void Load(string fileName)
{
using(var stream = File.OpenRead(fileName))
using(var zip = new GZipStream(stream, CompressionMode.Decompress))
DataItems = (DataItems)new BinaryFormatter().Deserialize(zip);
}
public void Save(string fileName)
{
using (var stream = File.OpenWrite(fileName))
using (var zip = new GZipStream(stream, CompressionMode.Compress))
new BinaryFormatter().Serialize(zip, DataItems);
}
}
}