NameProfile

NameProfile 函数会将字符串分配给指定的进程或线程。

NameProfile API 仅用于检测分析。 NameProfile API 不用于取样分析。

PROFILE_COMMAND_STATUS PROFILERAPI NameProfile(
                                   LPCTSTR pszName, 
                                   PROFILE_CONTROL_LEVEL Level,
                                   unsigned int dwId);

参数

pszName

分析元素的名称。 名称无效(导致 NameProfileA 返回 NAME_ERROR_INVALID_NAME)的原因:

  • 传入 NameProfileA 的指针是一个 NULL 值

  • pszName 的字符串数据以数字开头

  • pszName 的字符串数据包含空格

  • pszName 的字符串数据包含以下任意字符:,;.`~!@#$%^&*()=[]{}|\?/<>

Level

指示性能数据集合可应用到的分析级别。 下面的 PROFILE_CONTROL_LEVEL 值可用于指示性能数据集合可应用到的三个级别之一:

Enumerator

说明

PROFILE_GLOBALLEVEL

全局级别设置影响分析运行中的所有进程和线程。

PROFILE_PROCESSLEVEL

进程级别设置影响指定进程包含的所有线程。

PROFILE_THREADLEVEL

线程分析级别设置影响指定的线程。

dwId

分析级别标识符。 使用系统生成的进程或线程标识符。

属性值/返回值

该函数使用 PROFILE_COMMAND_STATUS 枚举指示成功或失败。 返回值可以是下列值之一:

Enumerator

说明

NAME_ERROR_ID_NOEXIST

指定的分析元素不存在。

NAME_ERROR_INVALID_NAME

名称无效。

NAME_ERROR_LEVEL_NOEXIST

指定的分析级别不存在。

NAME_ERROR_NO_SUPPORT

不支持指定的操作。

NAME_ERROR_OUTOFMEMORY

内存不可用于记录事件。

NAME_ERROR_REDEFINITION

已经为分析元素分配了名称。 此函数中的名称被忽略。

NAME_ERROR_TEXTTRUNCATED

包括 null 字符在内的名称文本超过 32 个字符,所以被截断。

NAME_OK

名称已成功注册。

备注

只能为每个进程或线程分配一个名称。 命名分析元素后,会忽略对该元素的 NameProfile 的后续调用。

如果为不同线程或进程指定了相同名称,则报告中将包含来自该级别中所有具有该名称的元素的数据。

如果指定当前进程或线程以外的进程或线程,则必须确保在命名之前该进程或线程已初始化并已开始运行。 否则,NameProfile 方法会失败。

重要

CreateProcess() 和 CreateThread() API 函数可在初始化其创建的线程或进程之前返回。

.NET Framework 等效项

Microsoft.VisualStudio.Profiler.dll

函数信息

Header

包含 VSPerf.h

使用 VSPerf.lib

Unicode

作为 NameProfileW (Unicode) 和 NameProfileA (ANSI) 实现。

示例

下面的代码演示 NameProfile 函数调用。 该示例使用 Win32 字符串宏和 ANSI 编译器设置,确定代码是否调用启用了 ANSI 的函数。

void ExerciseNameProfile()
{
    // Variables used to print output.
    HRESULT hResult;
    TCHAR tchBuffer[256];

    // Create and initialize variables to pass to 
    // ExerciseNameProfile.  The value of this 
    // parameter is based on the needs of the code;
    // and for the sake of simplicity in this example, 
    // the variable is assigned an arbitrary value.
    TCHAR * profileName = TEXT("ExerciseNameProfile");

    // Declare enumeration to hold result of call to 
    // ExerciseNameProfle.
    PROFILE_COMMAND_STATUS nameResult;

    nameResult =  NameProfile(
        profileName,
        PROFILE_GLOBALLEVEL,
        PROFILE_CURRENTID);

    // Format and print result.
    LPCTSTR pszFormat = TEXT("%s %d.\0");
    TCHAR* pszTxt = TEXT("NameProfile returned");
    hResult = StringCchPrintf(tchBuffer, 256, pszFormat, 
        pszTxt, nameResult);

#ifdef DEBUG
    OutputDebugString(tchBuffer);
#endif
}

请参见

其他资源

Visual Studio 探查器 API 参考(本机)