ToolPack1

Добавлен новый инструмент: 3)SimpleBenchmark Простая

9/27/2019 11:43:49 PM

Details

.gitignore 3(+3 -0)

diff --git a/.gitignore b/.gitignore
index 575328a..da53351 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,6 @@ ToolPack1/ConfigurationTool/obj/
 
 ToolPack1/SingletonTool/bin/
 ToolPack1/SingletonTool/obj/
+
+ToolPack1/SimpleBenchmark/bin/
+ToolPack1/SimpleBenchmark/obj/
diff --git a/Build/SimpleBenchmark.dll b/Build/SimpleBenchmark.dll
new file mode 100644
index 0000000..2e6c711
Binary files /dev/null and b/Build/SimpleBenchmark.dll differ
diff --git a/Build/SimpleBenchmark.pdb b/Build/SimpleBenchmark.pdb
new file mode 100644
index 0000000..cade54e
Binary files /dev/null and b/Build/SimpleBenchmark.pdb differ
diff --git a/ToolPack1/SimpleBenchmark/Properties/AssemblyInfo.cs b/ToolPack1/SimpleBenchmark/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..87a61c5
--- /dev/null
+++ b/ToolPack1/SimpleBenchmark/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Общие сведения об этой сборке предоставляются следующим набором
+// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,
+// связанные со сборкой.
+[assembly: AssemblyTitle("SimpleBenchmark")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("SimpleBenchmark")]
+[assembly: AssemblyCopyright("Copyright ©  2019")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми
+// для компонентов COM. Если необходимо обратиться к типу в этой сборке через
+// COM, задайте атрибуту ComVisible значение TRUE для этого типа.
+[assembly: ComVisible(false)]
+
+// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
+[assembly: Guid("f862bc1f-abc5-4c80-9210-1722da94a04c")]
+
+// Сведения о версии сборки состоят из следующих четырех значений:
+//
+//      Основной номер версии
+//      Дополнительный номер версии
+//   Номер сборки
+//      Редакция
+//
+// Можно задать все значения или принять номер сборки и номер редакции по умолчанию.
+// используя "*", как показано ниже:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/ToolPack1/SimpleBenchmark/SimpleBenchmark.csproj b/ToolPack1/SimpleBenchmark/SimpleBenchmark.csproj
new file mode 100644
index 0000000..da3d378
--- /dev/null
+++ b/ToolPack1/SimpleBenchmark/SimpleBenchmark.csproj
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{F862BC1F-ABC5-4C80-9210-1722DA94A04C}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>SimpleBenchmark</RootNamespace>
+    <AssemblyName>SimpleBenchmark</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="TimeTester.cs" />
+    <Compile Include="TimeTestResult.cs" />
+    <Compile Include="WorkTime.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
diff --git a/ToolPack1/SimpleBenchmark/TimeTester.cs b/ToolPack1/SimpleBenchmark/TimeTester.cs
new file mode 100644
index 0000000..3f1fd38
--- /dev/null
+++ b/ToolPack1/SimpleBenchmark/TimeTester.cs
@@ -0,0 +1,46 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using System.Diagnostics;
+
+namespace SimpleBenchmark
+{
+    //Тестер для проверки времениработы
+    public class TimeTester
+    {
+        /// <summary>
+        /// Функция проверка времени выполнения
+        /// </summary>
+        /// <param name="TestCount">Кол-во тестовых запусков</param>
+        /// <param name="action">Задание для проверки</param>
+        /// <param name="Preheating">Выполнить предварительный тестовый запуск делегата</param>
+        /// <returns></returns>
+        public TimeTestResult Work(int TestCount, Action action, bool Preheating = true)
+        {
+            if (Preheating)
+                action();
+
+            TimeTestResult res = new TimeTestResult(TestCount);
+
+            Stopwatch stopwatch = new Stopwatch();
+
+            for (int i = 0; i < TestCount; i++)
+            {
+
+                stopwatch.Start();
+                action();
+                stopwatch.Stop();
+
+                res[i] = new WorkTime(stopwatch);
+
+                stopwatch.Reset();
+            }
+
+
+            return res;
+        }
+
+    }
+}
diff --git a/ToolPack1/SimpleBenchmark/TimeTestResult.cs b/ToolPack1/SimpleBenchmark/TimeTestResult.cs
new file mode 100644
index 0000000..69cc6a0
--- /dev/null
+++ b/ToolPack1/SimpleBenchmark/TimeTestResult.cs
@@ -0,0 +1,43 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace SimpleBenchmark
+{
+
+    //Результаты работы теста времени выполнения
+    public class TimeTestResult : IEnumerable<WorkTime>
+    {
+        WorkTime[] times { get; }
+        public int Length => times.Length;
+
+        public WorkTime this[int i]
+        {
+            set => times[i] = value;
+            get => times[i];
+        }
+
+
+        //Среднее для Elapsed
+        public TimeSpan Elapsed_Average => new TimeSpan(0, 0, 0, 0,
+            (int)(times.Sum(e => e.Elapsed.TotalMilliseconds) / times.Length));
+        //Среднее для ElapsedMilliseconds
+        public double ElapsedMilliseconds_Average => times.Sum(e => e.ElapsedMilliseconds) / times.Length;
+        //Среднее для ElapsedTicks
+        public double ElapsedTicks_Average => times.Sum(e => e.ElapsedTicks) / times.Length;
+
+
+        public TimeTestResult(int TestCount)
+        {
+            times = new WorkTime[TestCount];
+        }
+
+
+        public IEnumerator<WorkTime> GetEnumerator() => times.AsEnumerable().GetEnumerator();
+
+        IEnumerator IEnumerable.GetEnumerator() => times.GetEnumerator();
+
+    }
+}
diff --git a/ToolPack1/SimpleBenchmark/WorkTime.cs b/ToolPack1/SimpleBenchmark/WorkTime.cs
new file mode 100644
index 0000000..2efa23b
--- /dev/null
+++ b/ToolPack1/SimpleBenchmark/WorkTime.cs
@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using System.Diagnostics;
+
+namespace SimpleBenchmark
+{
+    /// <summary>
+    /// Структура для хранения результатов замера,
+    /// полученных из stopwatch
+    /// </summary>
+    public struct WorkTime
+    {
+        // — возвращает общее затраченное время;
+        public TimeSpan Elapsed { set; get; }
+        // — возвращает общее затраченное время в миллисекундах;
+        public long ElapsedMilliseconds { set; get; }
+        //— возвращает общее затраченное время в тактах таймера;
+        public long ElapsedTicks { set; get; }
+
+        
+        public WorkTime(Stopwatch stopwatch)
+        {
+            Elapsed = stopwatch.Elapsed;
+            ElapsedMilliseconds = stopwatch.ElapsedMilliseconds;
+            ElapsedTicks = stopwatch.ElapsedTicks;
+        }
+
+
+        public override string ToString()
+        {
+            return Elapsed + " | " + ElapsedMilliseconds + " | " + ElapsedTicks;
+        }
+    }
+}
diff --git a/ToolPack1/ToolPack1.sln b/ToolPack1/ToolPack1.sln
index d85199c..3c14c96 100644
--- a/ToolPack1/ToolPack1.sln
+++ b/ToolPack1/ToolPack1.sln
@@ -13,6 +13,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SingletonTool", "SingletonT
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConfigurationTool", "ConfigurationTool\ConfigurationTool.csproj", "{E8A983A0-FF7D-4E9A-9234-3F19CCB93700}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SimpleBenchmark", "SimpleBenchmark\SimpleBenchmark.csproj", "{F862BC1F-ABC5-4C80-9210-1722DA94A04C}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -31,6 +33,10 @@ Global
 		{E8A983A0-FF7D-4E9A-9234-3F19CCB93700}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{E8A983A0-FF7D-4E9A-9234-3F19CCB93700}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{E8A983A0-FF7D-4E9A-9234-3F19CCB93700}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F862BC1F-ABC5-4C80-9210-1722DA94A04C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F862BC1F-ABC5-4C80-9210-1722DA94A04C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F862BC1F-ABC5-4C80-9210-1722DA94A04C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F862BC1F-ABC5-4C80-9210-1722DA94A04C}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -39,6 +45,7 @@ Global
 		{2383B162-6D95-47F4-AD93-8765DBB7AD89} = {ABC5281A-6B36-4D11-AFED-3E2EF981AA49}
 		{E69E7D23-3595-4742-AD69-9B245CE9C7B8} = {9FC03DF2-3AFE-4A62-B380-B9CBFF6486D1}
 		{E8A983A0-FF7D-4E9A-9234-3F19CCB93700} = {9FC03DF2-3AFE-4A62-B380-B9CBFF6486D1}
+		{F862BC1F-ABC5-4C80-9210-1722DA94A04C} = {9FC03DF2-3AFE-4A62-B380-B9CBFF6486D1}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {408C4B5A-5AF0-418D-A722-B2B253B5F831}