Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2012, 14:18   #1
Mixim
Форумчанин
 
Регистрация: 29.10.2009
Сообщений: 259
Вопрос Кэш-память машины - как определить?

Необходимо с помощью проведения "эксперимента"(работы с большими массивами, например) определить размер кэш-памяти ПК. Да, можно подгрузить отдельные DLL'ки и использоваться специальную функцию из них(примеров этому тьма в сети), а вот как реализовать эту функцию ручками самому - черт знает. Если правильно понимаю, то нужно взять некоторый большой объем данных и выполнить с ним некоторые вычисления(например, в некотором наборе массивов разной длинны выполнить сложение элементов), замерить время этих вычислений для каждого массива и размер массива, для которого относительное время выполнения операции вырастет "неимоверно", и будет являться размером кэш-памяти, но как это реализовать практически? К тому же данная задумка лично мне кажется бредовой, т.к. это потребует немалого времени(утрировано: сперва взять массив в 10 элементов - посчитать относительное время; взять массив в 20 элементов - посчитать относительное время выполнения операций;...; взять массив в 10000 элементов и посчитать относительное время...)
Может кто подскажет, каким образом можно более рационально вручную определить размер кэш-памяти, не используя стандартные функции и DLL ОС?
Пример получения размера кэш-памяти с помощью стандартных библиотечных функций(как мне не надо делать)<взято ОТСЮДА>:
Код:
        public enum CacheLevel : ushort
        {
            Level1 = 3,
            Level2 = 4,
            Level3 = 5,
        }

        public static class CPUInfo
        {
            public static List<uint> GetCacheSizes(CacheLevel level)
            {
                ManagementClass mc = new ManagementClass("Win32_CacheMemory");
                ManagementObjectCollection moc = mc.GetInstances();
                List<uint> cacheSizes = new List<uint>(moc.Count);

                cacheSizes.AddRange(moc
                  .Cast<ManagementObject>()
                  .Where(p => (ushort)(p.Properties["Level"].Value) == (ushort)level)
                  .Select(p => (uint)(p.Properties["MaxCacheSize"].Value)));

                return cacheSizes;
            }
        }
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.

Последний раз редактировалось Mixim; 01.03.2012 в 14:43.
Mixim вне форума Ответить с цитированием
Старый 01.03.2012, 14:50   #2
AlexDark
Форумчанин
 
Аватар для AlexDark
 
Регистрация: 23.12.2011
Сообщений: 117
По умолчанию

Прочитать маркировку на процессоре =)
Програмно-эмпирическим путем думаю нереально, ОС есть чем занять кэш и без прикладных программ.
Без api не обойтись
AlexDark вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как программно очистить кэш браузера? Виталий Желтяков JavaScript, Ajax 0 11.11.2011 12:24
Кэш память, или динамический массив? slips JavaScript, Ajax 1 07.09.2009 17:38
Кэш C# IICuX123 Фриланс 11 21.07.2009 14:09
Как вручную пересадить драйвер с одной машины на другую? Stilet Операционные системы общие вопросы 11 17.06.2009 21:14
Как удалить кэш и куки в webbrowser OkeaH Работа с сетью в Delphi 2 15.02.2009 16:58