Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 如何使用Delphi从远程计算机获取性能数据_Performance_Delphi_Winapi - Fatal编程技术网

Performance 如何使用Delphi从远程计算机获取性能数据

Performance 如何使用Delphi从远程计算机获取性能数据,performance,delphi,winapi,Performance,Delphi,Winapi,如果我拥有相应的权限,如何从远程计算机获取性能数据(例如“每秒页数”、“平均磁盘队列”等) 基本上我想写一个这样的函数: function GetPerformanceData(aComputerName, aPerformanceIndicator: string): variant; 当然,在Windows和Linux上最好是开箱即用。我不太清楚“开箱即用”是什么意思-您不想对服务器进行任何修改吗?另外,由于您使用的是Delphi,我假设客户端是Windows—那么服务器呢 最简单的方法是

如果我拥有相应的权限,如何从远程计算机获取性能数据(例如“每秒页数”、“平均磁盘队列”等)

基本上我想写一个这样的函数:

function GetPerformanceData(aComputerName, aPerformanceIndicator: string): variant;

当然,在Windows和Linux上最好是开箱即用。

我不太清楚“开箱即用”是什么意思-您不想对服务器进行任何修改吗?另外,由于您使用的是Delphi,我假设客户端是Windows—那么服务器呢

最简单的方法是创建一个在服务器上收集这些信息的守护进程/服务,客户端上的函数可以连接并读取这些信息。服务器可以是在apache中运行的CGI shell脚本或定制的Delphi程序。还要注意,您通常可以通过SSH在远程unix机器上运行命令,因此您可以在远程服务器上运行类似vm_stat的东西,而无需编写任何内容。Windows具有与PsExec工具类似的功能,您可以在此处阅读:

我不太清楚您所说的“开箱即用”是什么意思-您不想对服务器进行任何修改吗?另外,由于您使用的是Delphi,我假设客户端是Windows—那么服务器呢

最简单的方法是创建一个在服务器上收集这些信息的守护进程/服务,客户端上的函数可以连接并读取这些信息。服务器可以是在apache中运行的CGI shell脚本或定制的Delphi程序。还要注意,您通常可以通过SSH在远程unix机器上运行命令,因此您可以在远程服务器上运行类似vm_stat的东西,而无需编写任何内容。Windows具有与PsExec工具类似的功能,您可以在此处阅读:

如果启用,您可以使用Delphi提供的免费:

允许访问和更新的MagWMI windows系统信息的使用 Windows管理工具。 MagWMI提供对的常规视图访问 任何使用类似SQL的WMI信息 命令,以及一些 与TCP/IP相关的专用功能 配置,例如设置 适配器IP地址和计算机 名称和域/工作组

如果启用,您可以使用Delphi提供的免费:

允许访问和更新的MagWMI windows系统信息的使用 Windows管理工具。 MagWMI提供对的常规视图访问 任何使用类似SQL的WMI信息 命令,以及一些 与TCP/IP相关的专用功能 配置,例如设置 适配器IP地址和计算机 名称和域/工作组

看一看

您可以重写
GetPerformanceData
函数以允许连接到远程注册表:

function GetPerformanceData(const RegValue: string; const ComputerName: string = ''): PPerfDataBlock;
const
  BufSizeInc = 4096;
var
  BufSize, RetVal: Cardinal;
  Key: HKEY;
begin
  BufSize := BufSizeInc;
  Result := AllocMem(BufSize);
  try
    if ComputerName = '' then
      Key := HKEY_PERFORMANCE_DATA
    else if RegConnectRegistry(PChar(ComputerName), HKEY_PERFORMANCE_DATA, Key) <> ERROR_SUCCESS then
      RaiseLastOSError;

    RetVal := RegQueryValueEx(Key, PChar(RegValue), nil, nil, PByte(Result), @BufSize);
    try
      repeat
        case RetVal of
          ERROR_SUCCESS:
            Break;
          ERROR_MORE_DATA:
            begin
              Inc(BufSize, BufSizeInc);
              ReallocMem(Result, BufSize);
              RetVal := RegQueryValueEx(Key, PChar(RegValue), nil, nil, PByte(Result), @BufSize);
            end;
          else
            RaiseLastOSError;
        end;
      until False;
    finally
      RegCloseKey(Key);
    end;
  except
    FreeMem(Result);
    raise;
  end;
end;
您可以通过命令
lodctr/s:
获取性能对象和计数器索引。 例如,“Pages/sec”计数器索引为40,属于性能对象“Memory”,索引为4。 另外,根据原始计数器数据的定义,了解如何解释原始计数器数据。

了解原始计数器数据

您可以重写
GetPerformanceData
函数以允许连接到远程注册表:

function GetPerformanceData(const RegValue: string; const ComputerName: string = ''): PPerfDataBlock;
const
  BufSizeInc = 4096;
var
  BufSize, RetVal: Cardinal;
  Key: HKEY;
begin
  BufSize := BufSizeInc;
  Result := AllocMem(BufSize);
  try
    if ComputerName = '' then
      Key := HKEY_PERFORMANCE_DATA
    else if RegConnectRegistry(PChar(ComputerName), HKEY_PERFORMANCE_DATA, Key) <> ERROR_SUCCESS then
      RaiseLastOSError;

    RetVal := RegQueryValueEx(Key, PChar(RegValue), nil, nil, PByte(Result), @BufSize);
    try
      repeat
        case RetVal of
          ERROR_SUCCESS:
            Break;
          ERROR_MORE_DATA:
            begin
              Inc(BufSize, BufSizeInc);
              ReallocMem(Result, BufSize);
              RetVal := RegQueryValueEx(Key, PChar(RegValue), nil, nil, PByte(Result), @BufSize);
            end;
          else
            RaiseLastOSError;
        end;
      until False;
    finally
      RegCloseKey(Key);
    end;
  except
    FreeMem(Result);
    raise;
  end;
end;
您可以通过命令
lodctr/s:
获取性能对象和计数器索引。 例如,“Pages/sec”计数器索引为40,属于性能对象“Memory”,索引为4。
另外,根据原始计数器数据的定义,了解如何解释原始计数器数据。

+1特别是因为这是在Windows和Linux上“开箱即用”的唯一方法:远程机器应该提供数据,那么Delphi只是一个客户端。+1尤其是因为这是使其“开箱即用”的唯一方法在Windows和Linux上:远程机器应该提供数据,然后Delphi只是一个客户端。当然,你是对的。对不起,我忽略了Linux的要求。你当然是对的。对不起,我忽略了Linux的要求。