Скорость обработки данных - 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);
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5
Похожие ответы