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)); }
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>(); } }
private static void RunSelectedBenchmarks(BenchmarkType type) { if (type.HasFlag(BenchmarkType.Streams)) { BenchmarkRunner.Run <ChannelsStreamsBenchmark>(); } }
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); }