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

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «Программа для сравнения производительности необобщенного алгоритма ArrayList и обобщенного алгоритма List»

textual
Листинг программы
  1. internal sealed class OperationTimer : IDisposable
  2. {
  3.     private Stopwatch m_stopwatch;
  4.     private String m_text;
  5.     private Int32 m_collectionCount;
  6.     public OperationTimer(String text)
  7.     {
  8.         PrepareForOperation();
  9.         m_text = text;
  10.         m_collectionCount = GC.CollectionCount(0);
  11.         // Эта команда должна быть последней в этом методе
  12.         // для максимально точной оценки быстродействия
  13.        
  14.         m_stopwatch = Stopwatch.StartNew();
  15.     }
  16.     public void Dispose()
  17.     {
  18.         Console.WriteLine("{0} (GCs={1,3}) {2}", m_stopwatch.Elapsed,
  19.         GC.CollectionCount(0) - m_collectionCount, m_text);
  20.     }
  21.     private static void PrepareForOperation()
  22.     {
  23.         GC.Collect();
  24.         GC.WaitForPendingFinalizers();
  25.         GC.Collect();
  26.     }
  27. }

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


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

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

8   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы