Скорость обработки данных - 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);
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д