Erro: _MBCS String funções do arquivo Msvcrt.dll (versão 6.1.8637.0) É menor que versões anteriores

Traduções deste artigo Traduções deste artigo
ID do artigo: 264795 - Exibir os produtos aos quais esse artigo se aplica.
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Caracteres multibyte definir seqüência (MBCS) funções, como _ismbcspace , que são fornecidas pelo arquivo Msvcrt.dll (versão 6.1.8637.0) lançado com o Microsoft Windows 2000 e Microsoft Windows ME têm um desempenho mais lento que versões anteriores do arquivo Msvcrt.dll lançada com o Microsoft Windows NT 4.0, Windows 9 x, ou Visual C++ 6.0. O desempenho mais lento afeta qualquer aplicativo que direta ou indiretamente usa as funções de seqüência de caracteres MBCS do arquivo Msvcrt.dll.

O arquivo Mfc42.dll é criado com uma diretiva de processador _MBCS por padrão, e as funções de biblioteca do Microsoft Foundation Class (MFC) CString usam as funções MBCS do arquivo Msvcrt.dll por padrão. Aplicativos que usam funções MFC CString têm um desempenho mais lento quando são executados no Windows 2000 e Windows ME que quando eles executarem no Windows 9 x e Windows NT 4.0.

O grau de degradação do desempenho depende intensivo como o aplicativo usa as funções MFC CString ou funções de seqüência de caracteres do tempo de execução MBCS.

Resolução

Para resolver esse problema, obtenha o service pack mais recente para o Windows 2000. Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
260910Como obter o Service Pack mais recente do Windows 2000
A seguir estão três arounds trabalho possíveis para resolver o problema:
  1. Recrie o aplicativo para estaticamente vincular à biblioteca de tempo de execução. Biblioteca estática não tem o atraso de desempenho com funções de seqüência de caracteres MBCS no Windows 2000 e Windows Me.
  2. Modificar o aplicativo para ser Unicode compatível no Windows 2000. Por exemplo, uso _ttoi(argv[1]) no código de exemplo localizado na seção "Mais informações" deste artigo em vez de atoi(argv[1]) . Recrie o aplicativo com o manifesto _UNICODE em vez de _MBCS . Se o aplicativo usa o MFC, a versão Unicode de biblioteca MFC é usada por padrão. Consulte a biblioteca do MSDN para obter mais informações sobre programação de Unicode.
  3. Se seu aplicativo utiliza somente conjunto de caracteres de byte (SBCS), recompilar o aplicativo sem manifesto _MBCS . Se o aplicativo usa as funções MFC CString , você ainda encontrar esse problema MBCS porque MFC é criado com _MBCS por padrão. A seguir estão dois arounds trabalho possíveis para esta ocorrência:
    • Adicionar \MFC\SRC\Strex.cpp ao seu projeto e, em seguida, compilá-lo sem _MBCS . O arquivo Strex.cpp implementa as funções de CString . Isso pode não funcionar se seu aplicativo usa a biblioteca MFC indiretamente quando outras DLLs usadas pelo seu aplicativo utilizam funções do MFC CString .
    • Recriar a biblioteca MFC com MBCS = 0. Adicionar o arquivo MFC42.LIB para o projeto "Ignore Libraries" configuração e vincule a biblioteca MFC personalizada com o seu aplicativo. Consulte a Observação técnico TN033 para procedimentos de "Recriação MFC DLL".

Situação

A Microsoft confirmou que esse é um problema nos produtos da Microsoft listados no começo deste artigo. Esse problema foi corrigido primeiro no Windows 2000 Service Pack 2.

Mais Informações

Passos para reproduzir o problema

  • Crie um projeto Win32 Console Application com o código a seguir:
    #include <windows.h>
    #include <tchar.h>
    #include <process.h>
    #include <stdio.h>
    
    unsigned int __stdcall threadfunc(void *)
    {
        for (int v = 0; v <= 10000000; ++v)
    	_istspace(' ');
    	return 0;
    }
    
    int main(int argc, char **argv)
    {
        if (argc != 2)
    	{
    		printf("Usage: <appname.exe> <# of threads>\n");
    		exit(1);
    	}
    
        int nthreads = atoi(argv[1]);
        //int nthreads = _ttoi(argv[1]);  //UNICODE version
    
        HANDLE *handles = new HANDLE[nthreads];
    	unsigned int *threadID = new unsigned int[nthreads];
    
        for (int i = 0; i < nthreads; ++i) {
    	handles[i] = (HANDLE) _beginthreadex(NULL, 0, &threadfunc, NULL, 0, &threadID[i]);
        }
    
        WaitForMultipleObjects(nthreads, handles, TRUE, INFINITE);
    
    	delete [] handles;
    	delete [] threadID;
    
        return 0;
    }
    						

  • Crie o aplicativo usando o arquivo de Msvcrt.dll de biblioteca de tempo de execução de DLL multithread. O projeto é criado com a diretiva de processador _MBCS por padrão e _istspace() é mapeado para _ismbcspace() . Este aplicativo é executado mais lentamente no Windows 2000 e Windows ME que no Windows NT 4.0 e Windows 9 x.

Referências

"Seqüências de caracteres: Visão geral," "conjuntos de caracteres multibyte (MBCS): Overview,"e"programação Unicode: Overview" no MSDN em documentação do Visual C++ / Visual do programador de C++ guia / adicionando /Overviews de funcionalidade do programa.

TN033: Versão DLL do MFC

Propriedades

ID do artigo: 264795 - Última revisão: domingo, 20 de outubro de 2013 - Revisão: 3.3
A informação contida neste artigo aplica-se a:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
Palavras-chave: 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbbug kbcrt kbfix KB264795 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 264795

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com