setprocessworkingsetsize getcurrentprocess会导致系统问题吗

yonghu 219 0

本文共计4834个文字,预计阅读时间需要15分58秒,欢迎阅读借鉴、一起学习、进步,内容来自小编精心整理收集,如有不正确和疑问,欢迎指正。

setprocessworkingsetsize getcurrentprocess会导致系统问题吗

伪句柄可以代替句柄被函数调用,用句柄调用当然也行。相当于是一个别名的概念,但伪句柄不需要去closehandle,因为它只是个别名,如果closehandle伪句柄,造成的结果可能是无法预料的。虽然是伪句柄,也是当前的。openprocesstoken不用获取的伪句柄,用进程真实句柄也可。Len函数只接收两种:Len(string | varname)其他的都不行,varname可以是variant,也可以是用户自定义类型,但不能是数组!

delphi 释放内存会对程序有什么影响 setprocessworkingsetsize(getcurrentprocess, $ffffffff, $ffffffff)

在网上看到如题方法可以减少程序内存使用,不知道该方法是否有其他弊端,会不会导致其他问题呢?

SetProcessWorkingSetSize用于设置进程所使用的内存在物理内存中实际存放的大小(即工作集)。$ffffffff的意思是尽量减小对物理内存的占用,此时暂时不用的部分会被放入虚拟内存中。
需要注意的是,此函数只能减少当前时刻内存的占用,随着程序的继续运行,内存的占用会继续发生变化。如果频繁地使用此函数,有可能导致程序不断从虚拟内存中调取所需的数据,造成性能上的损失。

下面分享相关内容的知识扩展:

Win7 下如何使用 CreateProcess,谢谢

需要提升权限文件开始处调用下代码行EnableProcessToken(SE_DEBUG_NAME),我电脑上Win7打开UAC情况下也创建进程若还能创建进程检查CreateProcess调用GetLastError值
/* enable token of current process */
bool EnableProcessToken(const char* szType){HANDLE hToken;
TOKEN_PRIVILEGES tp;LUID luid;/* elevation the privilege of current process. */
if(!::OpenProcessToken(::GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken))
return false;
::LookupPrivilegeValue(NULL, szType, &luid);
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if(!::AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL))

cfileprocess出现错误怎么解决?

使用CFileDialog选择文件了以后,会在其内部调用“SetCurrentDirectory“设置被选择文件的目录为当前路径。

因此如果文件和程序不在同一路径,那么CreateProcess使用内部调用的相对路径就可能找不到对应程序,所以导致createprocess出现错误代码2的情况。解决办法是CreateProcess使用可执行文件的绝对路径便可以解决文件和程序不在同一路径的问题。

cfileprocess出现错误怎么解决?

扩展资料:

CreateProcess部分参数含义

1、lpApplicationName

指向一个NULL结尾的、用来指定可执行模块的字符串。

这个字符串可以是可执行模块的绝对路径,也可以是相对路径,在后一种情况下,函数使用当前驱动器和目录建立可执行模块的路径。

这个参数可以被设为NULL,在这种情况下,可执行模块的名字必须处于 lpCommandLine 参数最前面并由空格符与后面的字符分开。

2、lpCommandLine

指向一个以NULL结尾的字符串,该字符串指定要执行的命令行。这个参数可以为空,那么函数将使用lpApplicationName参数指定的字符串当做要运行的程序的命令行。

如果lpApplicationName和lpCommandLine参数都不为空,那么lpApplicationName参数指定将要被运行的模块,lpCommandLine参数指定将被运行的模块的命令行。

新运行的进程可以使用GetCommandLine函数获得整个命令行。C语言程序可以使用argc和argv参数。

3、lpProcessAttributes

指向一个SECURITY_ATTRIBUTES结构体,这个结构体决定是否返回的句柄可以被子进程继承。如果lpProcessAttributes参数为空(NULL),那么句柄不能被继承。

在Windows NT中:SECURITY_ATTRIBUTES结构的lpSecurityDescriptor成员指定了新进程的安全描述符,如果参数为空,新进程使用默认的安全描述符。

4、lpThreadAttributes

同lpProcessAttribute,不过这个参数决定的是线程是否被继承,通常置为NULL。

在c#中如何使用process这个类来获取进程的详细信息

如题,包括进程用户,进程CPU的使用等
using System;
using System.Windows.Forms;
using System.Diagnostics;
using System.Collections;

private void EnumProcesses()
{

// Timespans for individual process information
TimeSpan tpt;
TimeSpan tppt;
TimeSpan tupt;

// Timespans for machine
TimeSpan mtpt = new TimeSpan();
TimeSpan mtppt = new TimeSpan();
TimeSpan mtupt = new TimeSpan();
ListViewItem lSingleItem;

// Enumerate all processes
try
{
Process[] Processes;

if (!(mcolProcesses == null))
{
mcolProcesses = new ArrayList();
}

if (this.lvProcesses.Items.Count > 0)
{
this.lvProcesses.Items.Clear();
this.lvProcessDetail.Items.Clear();
this.lvThreads.Items.Clear();
}

Processes = Process.GetProcesses();

foreach(Process p in Processes)
{
mcolProcesses.Add(p);
// Get processor time and store
tppt = p.PrivilegedProcessorTime;
tupt = p.UserProcessorTime;
tpt = p.TotalProcessorTime;

// Add the current process times to total times.
mtpt = mtpt.Add(tpt);
mtppt = mtppt.Add(tppt);
mtupt = mtupt.Add(tupt);

// % User Processor Time

decimal dblPUPT = Decimal.Divide(tupt.Ticks, tpt.Ticks);
string strPUPT = dblPUPT.ToString("#0%");

// % Privileged Processor Time
decimal dblPPPT = Decimal.Divide(tppt.Ticks, tpt.Ticks);
string strPPPT = dblPPPT.ToString("#0%");
string strTPT;

strTPT = (tpt.Days.ToString("00") + "." + tpt.Hours.ToString("00") + ":" + tpt.Minutes.ToString("00") + ":" + tpt.Seconds.ToString("00"));

lSingleItem = this.lvProcesses.Items.Add(p.ProcessName + " (0x" + (p.Id.ToString("x")).ToLower() + ")");
lSingleItem.SubItems.Add(p.Id.ToString());
lSingleItem.SubItems.Add(strTPT);
lSingleItem.SubItems.Add(strPPPT);
lSingleItem.SubItems.Add(strPUPT);
}

// % Total User Processor Time
decimal mdecPUPT = Decimal.Divide(mtupt.Ticks , mtpt.Ticks);
string mstrPUPT = mdecPUPT.ToString("#0%");

// % Total Privileged Processor Time
decimal mdecPPPT = decimal.Divide(mtppt.Ticks,mtpt.Ticks);
string mstrPPPT = mdecPPPT.ToString("#0%");
string mstrTPT;

mstrTPT = (mtpt.Days.ToString("00") + "." + mtpt.Hours.ToString("00") + ":" + mtpt.Minutes.ToString("00") + ":" + mtpt.Seconds.ToString("00"));

// Add entry for all processes
lSingleItem = this.lvProcesses.Items.Add(PROCESS_NAME_TOTAL);
lSingleItem.SubItems.Add(PID_NA);
lSingleItem.SubItems.Add(mstrTPT);
lSingleItem.SubItems.Add(mstrPPPT);
lSingleItem.SubItems.Add(mstrPUPT);

}
catch (Exception exp)
{
MessageBox.Show(exp.Message, exp.Source, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

c# 检测cpu使用率
创建一个控制台应用程序,代码如下

代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

//引用2命名空间
using System.Diagnostics;
using System.Threading;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Process[] p = Process.GetProcessesByName("devenv");//获取指定进程信息
// Process[] p = Process.GetProcesses();//获取所有进程信息
string cpu = string.Empty;
string info = string.Empty;

PerformanceCounter pp = new PerformanceCounter();//性能计数器
pp.CategoryName = "Process";//指定获取计算机进程信息如果传Processor参数代表查询计算机CPU
pp.CounterName = "% Processor Time";//占有率
//如果pp.CategoryName="Processor",那么你这里赋值这个参数 pp.InstanceName = "_Total"代表查询本计算机的总CPU。
pp.InstanceName = "devenv";//指定进程
pp.MachineName = ".";
if (p.Length > 0)
{
foreach (Process pr in p)
{
while (true)//1秒钟读取一次CPU占有率。
{
info = pr.ProcessName + "内存:" +
(Convert.ToInt64(pr.WorkingSet64.ToString()) / 1024).ToString();//得到进程内存
Console.WriteLine(info + " CPU使用情况:" + Math.Round(pp.NextValue(), 2).ToString() + "%");
Thread.Sleep(1000);
}
}
}
}
}
}

抱歉,评论功能暂时关闭!