private void CreateProcessAsync() { Task.Factory.StartNew(() => { lock (_locker) { try { // 清理除当前外的Temp/Kernel Cleaner.Instance.Clear(); NTMinerConsole.UserOk("场地打扫完毕"); // 应用超频 if (NTMinerContext.Instance.GpuProfileSet.IsOverClockEnabled(MainCoin.GetId())) { NTMinerConsole.UserWarn("应用超频,如果CPU性能较差耗时可能超过1分钟,请耐心等待"); var cmd = new CoinOverClockCommand(coinId: MainCoin.GetId()); AddOnecePath <CoinOverClockDoneEvent>("超频完成后继续流程", LogEnum.DevConsole, message => { // pathId是唯一的,从而可以断定该消息一定是因为该命令而引发的 ContinueCreateProcess(); }, location: this.GetType(), pathId: cmd.MessageId); // 超频是在另一个线程执行的,因为N卡超频当cpu性能非常差时较耗时 VirtualRoot.Execute(cmd); } else { ContinueCreateProcess(); } } catch (Exception e) { Logger.ErrorDebugLine(e); NTMinerConsole.UserFail("挖矿内核启动失败,请联系开发人员解决"); } } }); }
private void ReportNodeAsync(Action callback = null) { int minerClientWsSessionCount = 0; int minerStudioWsSessionCount = 0; minerClientWsSessionCount = WsRoot.MinerClientSessionSet.WsSessionManager.Count; minerStudioWsSessionCount = WsRoot.MinerStudioSessionSet.WsSessionManager.Count; var ram = Windows.Ram.Instance; var cpu = Windows.Cpu.Instance; RpcRoot.OfficialServer.WsServerNodeService.ReportNodeStateAsync(new WsServerNodeState { Address = ServerRoot.HostConfig.ThisServerAddress, Description = string.Empty, MinerClientSessionCount = WsRoot.MinerClientSessionSet.Count, MinerStudioSessionCount = WsRoot.MinerStudioSessionSet.Count, MinerClientWsSessionCount = minerClientWsSessionCount, MinerStudioWsSessionCount = minerStudioWsSessionCount, Cpu = cpu.ToData(), TotalPhysicalMemory = ram.TotalPhysicalMemory, AvailablePhysicalMemory = ram.AvailablePhysicalMemory, OSInfo = Windows.OS.Instance.OsInfo, CpuPerformance = cpu.GetCurrentCpuUsage() }, (response, e) => { if (response.IsSuccess()) { NTMinerConsole.UserOk("呼吸成功"); } else { NTMinerConsole.UserFail("呼吸失败:" + response.ReadMessage(e)); } callback?.Invoke(); }); }
private void ReportNodeAsync(Action callback = null) { Task.Factory.StartNew(() => { WsServerNodeState nodeState = null; try { int minerClientWsSessionCount = 0; int minerStudioWsSessionCount = 0; minerClientWsSessionCount = AppRoot.WsServer.MinerClientWsSessions.Count; minerStudioWsSessionCount = AppRoot.WsServer.MinerStudioWsSessions.Count; var ram = Windows.Ram.Instance; var cpu = Windows.Cpu.Instance; nodeState = new WsServerNodeState { Address = ServerRoot.HostConfig.ThisServerAddress, Description = string.Empty, MinerClientSessionCount = AppRoot.MinerClientSessionSet.Count, MinerStudioSessionCount = AppRoot.MinerStudioSessionSet.Count, MinerClientWsSessionCount = minerClientWsSessionCount, MinerStudioWsSessionCount = minerStudioWsSessionCount, Cpu = cpu.ToData(), TotalPhysicalMemory = ram.TotalPhysicalMemory, AvailablePhysicalMemory = ram.AvailablePhysicalMemory, OSInfo = Windows.OS.Instance.OsInfo, CpuPerformance = cpu.GetTotalCpuUsage(), // 以下三个属性的访问约耗时30毫秒所以放在Task中 ProcessMemoryMb = VirtualRoot.ProcessMemoryMb, ThreadCount = VirtualRoot.ThreadCount, HandleCount = VirtualRoot.HandleCount, AvailableFreeSpaceInfo = VirtualRoot.GetAvailableFreeSpaceInfo() }; } catch (Exception e) { Logger.ErrorDebugLine(e); } _wsServerNodeRedis.SetAsync(nodeState).ContinueWith(t => { if (t.Exception != null) { NTMinerConsole.UserFail("呼吸失败:" + t.Exception.Message); } else { NTMinerConsole.UserOk("呼吸成功"); } callback?.Invoke(); }); }); }
private void ReportNodeAsync(Action callback = null) { WsServerNodeState nodeState = null; try { int minerClientWsSessionCount = 0; int minerStudioWsSessionCount = 0; minerClientWsSessionCount = WsRoot.MinerClientSessionSet.WsSessionManager.Count; minerStudioWsSessionCount = WsRoot.MinerStudioSessionSet.WsSessionManager.Count; var ram = Windows.Ram.Instance; var cpu = Windows.Cpu.Instance; nodeState = new WsServerNodeState { Address = ServerRoot.HostConfig.ThisServerAddress, Description = string.Empty, MinerClientSessionCount = WsRoot.MinerClientSessionSet.Count, MinerStudioSessionCount = WsRoot.MinerStudioSessionSet.Count, MinerClientWsSessionCount = minerClientWsSessionCount, MinerStudioWsSessionCount = minerStudioWsSessionCount, Cpu = cpu.ToData(), TotalPhysicalMemory = ram.TotalPhysicalMemory, AvailablePhysicalMemory = ram.AvailablePhysicalMemory, OSInfo = Windows.OS.Instance.OsInfo, CpuPerformance = cpu.GetCurrentCpuUsage() }; } catch (Exception e) { Logger.ErrorDebugLine(e); } _wsServerNodeRedis.SetAsync(nodeState).ContinueWith(t => { if (t.Exception != null) { NTMinerConsole.UserFail("呼吸失败:" + t.Exception.Message); } else { NTMinerConsole.UserOk("呼吸成功"); } callback?.Invoke(); }); }