C# 从远程计算机获取环境变量非常慢
我使用以下代码从远程机器检索环境变量 问题是,代码需要很长时间才能运行C# 从远程计算机获取环境变量非常慢,c#,.net,winapi,C#,.net,Winapi,我使用以下代码从远程机器检索环境变量 问题是,代码需要很长时间才能运行 DataTable envVarliables = new DataTable(); envVarliables.Columns.Add("UserName"); envVarliables.Columns.Add("VarName"); envVarliables.Columns.Add("VarValue"); Ma
DataTable envVarliables = new DataTable();
envVarliables.Columns.Add("UserName");
envVarliables.Columns.Add("VarName");
envVarliables.Columns.Add("VarValue");
ManagementObjectSearcher query = null;
ManagementObjectCollection queryCollection = null;
ConnectionOptions opt = new ConnectionOptions();
opt.Impersonation = ImpersonationLevel.Impersonate;
opt.EnablePrivileges = true;
opt.Username = @"domain\user";
opt.Password = @"password";
try
{
ManagementPath p = new ManagementPath(@"\\servername" + "\\root\\cimv2");
ManagementScope msc = new ManagementScope(p, opt);
SelectQuery q = new SelectQuery("select * from Win32_Environment where Name='IBMSENV' ");
query = new ManagementObjectSearcher(msc, q, null);
queryCollection = query.Get();
//Console.WriteLine(queryCollection.Count);
List<string> temp = new List<string>();
foreach (ManagementBaseObject envVar in queryCollection)
{
if (envVar["Name"].ToString() == "MYENVVARNAME")
{
envVarliables.Rows.Add(envVar["UserName"].ToString(), envVar["Name"].ToString(),
envVar["VariableValue"].ToString());
}
envVar["VariableValue"].ToString());
//temp.Add(envVar["Name"].ToString());
}
return envVarliables;
DataTable envVarliables=newdatatable();
envVarliables.Columns.Add(“用户名”);
envVarliables.Columns.Add(“VarName”);
envVarliables.Columns.Add(“VarValue”);
ManagementObjectSearcher查询=null;
ManagementObjectCollection queryCollection=null;
ConnectionOptions opt=新的ConnectionOptions();
opt.Impersonation=ImpersonationLevel.Impersonate;
opt.EnablePrivileges=true;
opt.Username=@“域\用户”;
opt.Password=@“Password”;
尝试
{
ManagementPath p=新的管理路径(@“\\servername”+“\\root\\cimv2”);
ManagementScope msc=新的管理范围(p,opt);
SelectQuery q=new SelectQuery(“从Win32_环境中选择*,其中Name='IBMSENV'”);
query=新的ManagementObjectSearcher(msc、q、null);
queryCollection=query.Get();
//Console.WriteLine(queryCollection.Count);
列表温度=新列表();
foreach(queryCollection中的ManagementBaseObject环境变量)
{
if(envVar[“Name”].ToString()=“MYENVVARNAME”)
{
envVarliables.Rows.Add(envVar[“UserName”].ToString(),envVar[“Name”].ToString(),
envVar[“VariableValue”].ToString());
}
envVar[“VariableValue”].ToString());
//临时添加(envVar[“Name”].ToString());
}
归还债务;
我的问题在foreach(queryCollection中的ManagementBaseObject envVar)
当它第一次到达该行时,需要大约30秒到1.5分钟甚至更多的时间来执行
在那之后,它的循环非常快
问题是,我能改进一些东西使它工作得更快吗
还有一个问题,是否有其他方法从远程机器获取数据?
例如,从我使用的远程机器获取其他数据
但它没有检索环境变量的方法我以前见过这种情况,或者类似的情况。请尝试在远程计算机的防火墙中启用“远程服务管理(RPC)”异常。将要求它执行此操作,thanks@HarryJohnston-嗨,我试过你的建议,但没用:(我想可能是另一个端口。尝试在初始延迟期间使用
netstat
,查看客户端是否正在尝试连接并被防火墙阻止;查找SYN_SENT的状态。@HarryJohnston我不确定这是端口问题。它自己的查询在远程计算机上执行,行为“queryCollection=query.Get()”该行在不到一秒钟的时间内执行。它第一次尝试运行此行中的成员“foreach(queryCollection中的ManagementBaseObject envVar)”需要30秒或更长时间