0 / 0 / 0
Регистрация: 01.09.2016
Сообщений: 4
1

Программа для сравнения производительности необобщенного алгоритма ArrayList и обобщенного алгоритма List

01.09.2016, 13:38. Показов 1738. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброе время суток форумчане!
Наткнулся я в книжке на этот код, решил проверить у себя, и получилось так, что код написан с ошибками в:
-public void Dispose() (не существует имя (m_stopwach) и пропущена запятая в GC.CollectionCount(0) m_collectionCount)
И хотел бы попросить объяснить что тут написано и почему используется Using: using (new OperationTimer("List<Int32>")). И в private static void PrepareForOperation() (я так полагаю это методы что мусор собирают)
Пытался через Ф1 найти в документации, и что то про OperationTimer ничего не нашлось.
Кликните здесь для просмотра всего текста

"...я написал программу для сравнения производительности необобщенного алгоритма
ArrayList из библиотеки классов FCL и обобщенного алгоритма List. В ходе те-
стирования измерялась производительность алгоритмов с объектами как значимых,
так и ссылочных типов:"
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
public static class Program
{
    public static void Main()
    {
        ValueTypePerfTest();
        ReferenceTypePerfTest();
    }
    private static void ValueTypePerfTest()
    {
        const Int32 count = 10000000;
        using (new OperationTimer("List<Int32>"))
        {
            List<Int32> l = new List<Int32>();
            for (Int32 n = 0; n < count; n++)
            {
                l.Add(n); // Без упаковки
                Int32 x = l[n]; // Без распаковки
            }
            l = null; // Для удаления в процессе уборки мусора
        }
        using (new OperationTimer("ArrayList of Int32"))
        {
            ArrayList a = new ArrayList();
            for (Int32 n = 0; n < count; n++)
            {
                a.Add(n); // Упаковка
                Int32 x = (Int32)a[n]; // Распаковка
            }
            a = null; // Для удаления в процессе уборки мусора
        }
    }
    private static void ReferenceTypePerfTest()
    {
        const Int32 count = 10000000;
        using (new OperationTimer("List<String>"))
        {
            List<String> l = new List<String>();
            for (Int32 n = 0; n < count; n++)
            {
                l.Add("X"); // Копирование ссылки
                String x = l[n]; // Копирование ссылки
            }
            l = null; // Для удаления в процессе уборки мусора
        }
        using (new OperationTimer("ArrayList of String"))
        {
            ArrayList a = new ArrayList();
            for (Int32 n = 0; n < count; n++)
            {
                a.Add("X"); // Копирование ссылки
                String x = (String)a[n]; // Проверка преобразования
            } // и копирование ссылки
            a = null; // Для удаления в процессе уборки мусора
        }
    }
}
// Класс для оценки времени выполнения операций
internal sealed class OperationTimer : IDisposable
{
    private Int64 m_startTime;
    private String m_text;
    private Int32 m_collectionCount;
    public OperationTimer(String text)
    {
        PrepareForOperation();
        m_text = text;
        m_collectionCount = GC.CollectionCount(0);
        // Эта команда должна быть последней в этом методе
        // для максимально точной оценки быстродействия
        
        m_startTime = Stopwatch.StartNew();
    }
    public void Dispose()
    {
        Console.WriteLine("{0} (GCs={1,3}) {2}", [B](m_stopwatch.Elapsed)[/B],
        [B]GC.CollectionCount(0) m_collectionCount[/B], m_text);
    }
    private static void PrepareForOperation()
    {
        GC.Collect();
        GC.WaitForPendingFinalizers();
        GC.Collect();
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2016, 13:38
Ответы с готовыми решениями:

сравнения исходный и рекуррентного алгоритма, время алгоритма
Всем здравствуйте. Есть формула tic a = 30; for n = 1:1:100; u1(n) = sin(a*n); u2(n) =...

Реализация обобщенного алгоритма
Люди, помогите, пожалуйста. Нужно реализовать обобщенный алгоритм, который ищет в диапазоне...

Программа для сравнения производительности процессоров?
есть ли какая-нибудь прога сравнения производительности процессоров?

Оценка производительности алгоритма
пожскажите, как можно оценить производительность написанных алгоритмов??? я пытался получить время...

5
Администратор
Эксперт .NET
16989 / 13348 / 5209
Регистрация: 17.03.2014
Сообщений: 27,293
Записей в блоге: 1
01.09.2016, 14:02 2
Seya_9, похоже класс OperationTimer нужно объявить так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
internal sealed class OperationTimer : IDisposable
{
    private Stopwatch m_stopwatch;
    private String m_text;
    private Int32 m_collectionCount;
    public OperationTimer(String text)
    {
        PrepareForOperation();
        m_text = text;
        m_collectionCount = GC.CollectionCount(0);
        // Эта команда должна быть последней в этом методе
        // для максимально точной оценки быстродействия
        
        m_stopwatch = Stopwatch.StartNew();
    }
    public void Dispose()
    {
        Console.WriteLine("{0} (GCs={1,3}) {2}", m_stopwatch.Elapsed,
        GC.CollectionCount(0) - m_collectionCount, m_text);
    }
    private static void PrepareForOperation()
    {
        GC.Collect();
        GC.WaitForPendingFinalizers();
        GC.Collect();
    }
}
Цитата Сообщение от Seya_9 Посмотреть сообщение
Наткнулся я в книжке на этот код
В какой книге?
0
0 / 0 / 0
Регистрация: 01.09.2016
Сообщений: 4
01.09.2016, 14:16  [ТС] 3
Цитата Сообщение от OwenGlendower Посмотреть сообщение
В какой книге?
Джеффри Рихтер Via C#, глава 12, "обобщения" стр. 305
0
Администратор
Эксперт .NET
16989 / 13348 / 5209
Регистрация: 17.03.2014
Сообщений: 27,293
Записей в блоге: 1
01.09.2016, 14:24 4
Цитата Сообщение от Seya_9 Посмотреть сообщение
Джеффри Рихтер Via C#, глава 12, "обобщения" стр. 305
Если ты набрал код точно как в книге, то значит это плохой перевод В английском варианте код верный.
1
0 / 0 / 0
Регистрация: 01.09.2016
Сообщений: 4
01.09.2016, 14:33  [ТС] 5
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Если ты набрал код точно как в книге, то значит это плохой перевод В английском варианте код верный.
И действительно, в англ. варианте все верно, спасибо, буду примеры оттуда брать.
А по этому вопросу не могли бы помочь?
Цитата Сообщение от Seya_9 Посмотреть сообщение
И хотел бы попросить объяснить что тут написано и почему используется Using: using (new OperationTimer("List<Int32>")). И в private static void PrepareForOperation() (я так полагаю это методы что мусор собирают)
Пытался через Ф1 найти в документации, и что то про OperationTimer ничего не нашлось.
0
Администратор
Эксперт .NET
16989 / 13348 / 5209
Регистрация: 17.03.2014
Сообщений: 27,293
Записей в блоге: 1
01.09.2016, 15:00 6
Лучший ответ Сообщение было отмечено Seya_9 как решение

Решение

Seya_9, блок using используется в связке с типами реализующими IDisposable чтобы гарантировать освобождение ресурсов связанными с этой переменной. В данном случае это сделано больше для удобства чем из реальной необходимости.

Метод PrepareForOperation() делает полную сборку мусора чтобы точнее подсчитать сколько сборок мусора произойдет при выполнении теста.
1
01.09.2016, 15:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.09.2016, 15:00
Помогаю со студенческими работами здесь

Программа для выполнения алгоритма
Ребята,привет. Ситуация такая: работаю днём на компе,а вечером на ноуте, бывает меняется, днём на...

есть ли программа для подбора алгоритма
во франции на азс Шелл есть интернет доступ. wifi. Но нужно у оператора просить карту с паролем....

Программа для алгоритма Брауна-Робинсона
Добрый день, с матлабом практически незнаком, но для написания диссертации, нужна программка,...

Реализуйте на практике 2 алгоритма поиска и 2 алгоритма сортировки. Результаты сравните
Всем привет! Я в С++ абсолютный чайнег, поэтому за дебильные вопросы сапогами не пинайте))) в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru