Example #1
0
 public static Action<byte[], int, int> GetReadOrWriteAction(BenchmarkType type, Stream stream)
 {
     if (type.HasFlag(BenchmarkType.Read) && !type.HasFlag(BenchmarkType.Write))
         return ((bytes, i, length) => stream.Read(bytes, i, length));
     else if (type.HasFlag(BenchmarkType.Write) && !type.HasFlag(BenchmarkType.Read))
         return stream.Write;
     else
         throw new ArgumentException($"{nameof(type)}参数不能同时具有Write和Read标志。", nameof(type));
 }
Example #2
0
 private static void RunSelectedBenchmarks(BenchmarkType type)
 {
     if (type.HasFlag(BenchmarkType.Enumerators))
     {
         BenchmarkRunner.Run <Enumerators>();
     }
     if (type.HasFlag(BenchmarkType.Throughput))
     {
         BenchmarkRunner.Run <PipeThroughput>();
     }
     if (type.HasFlag(BenchmarkType.ReadCursorOperations))
     {
         BenchmarkRunner.Run <ReadCursorOperationsThroughput>();
     }
 }
Example #3
0
 private static void RunSelectedBenchmarks(BenchmarkType type)
 {
     if (type.HasFlag(BenchmarkType.Streams))
     {
         BenchmarkRunner.Run <ChannelsStreamsBenchmark>();
     }
 }
Example #4
0
        public static void OpenFileHandle(PartitionInfo partition, BenchmarkType benchmarkType, Action<SafeFileHandle> work)
        {
            FileAccess fileAccess = (benchmarkType.HasFlag(BenchmarkType.Read) ? FileAccess.Read : new FileAccess()) | (benchmarkType.HasFlag(BenchmarkType.Write) ? FileAccess.Write : new FileAccess());
            string fullWorkDirectory = partition.DeviceId + workDirectory;
            string fileDirectory = $@"{fullWorkDirectory}\{fileName}";

            DeleteDirectory(fullWorkDirectory);             // 如果有,删除目录
            Directory.CreateDirectory(fullWorkDirectory);   // 创建测试目录            
            DecompressFolder(fullWorkDirectory);            // 将测试目录的压缩选项取消
            //打开文件句柄
            using (SafeFileHandle handle = NativeMethods.CreateFile(fileDirectory, fileAccess, FileShare.None, IntPtr.Zero, FileMode.OpenOrCreate, FileFlags, IntPtr.Zero))
            {
                int errorcode = Marshal.GetLastWin32Error();
                if (handle.IsInvalid)
                {
                    //TODO: 本地化
                    throw new IOException($"测试临时文件创建失败。错误:{errorcode}", new Win32Exception(errorcode));
                }
                work(handle);
            }
            DeleteDirectory(fullWorkDirectory);
        }