Chyba: _MBCS řetězcová funkce souboru Msvcrt.dll (verze 6.1.8637.0) je pomalejší než předchozí verze

Překlady článku Překlady článku
ID článku: 264795 - Produkty, které se vztahují k tomuto článku.
Tento článek byl archivován. Je nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Vícebajtové znakové sady (MBCS) řetězec funkce, jako například _ismbcspace poskytované vydána souboru Msvcrt.dll (verze 6.1.8637.0) se systémem Windows 2000 i Microsoft Windows ME mají nižší výkon než dřívější verze souboru Msvcrt.dll vydány s Microsoft Windows NT 4.0 Windows 9 x nebo Visual C++ 6.0. Pomalejší výkon ovlivní všechny aplikace používající přímo nebo nepřímo MBCS řetězcové funkce souboru Msvcrt.dll.

Soubor Mfc42.dll je integrována s direktivou _MBCS procesoru ve výchozím nastavení a funkce Foundation Class Library (MFC) CString používat funkce MBCS souboru Msvcrt.dll ve výchozím nastavení. Aplikace, které používají funkce MFC CString mít nižší výkon při spuštění v systému Windows 2000 a Windows ME než při jejich spuštění v systému Windows 9 x a Windows NT 4.0.

Stupeň snížení výkonu závisí na způsobu intenzivní aplikace používá při běhu MBCS řetězcové funkce nebo funkcí MFC CString.

Řešení

Tento problém vyřešíte pomocí nejnovější aktualizace service pack pro systém Windows 2000. Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:
260910Jak získat nejnovější aktualizaci Service Pack pro systém Windows 2000
Zde jsou tři možné práce arounds problém vyřešit:
  1. Znovu sestavit aplikaci staticky propojení knihovna run-time. Statická knihovna nemá zpoždění výkonu s MBCS řetězcové funkce v systému Windows 2000 a Windows ME.
  2. Upravit aplikace být Unicode v systému Windows 2000 kompatibilní. Například použití _ttoi(argv[1]) v ukázkovém kódu umístěna v části "Další informace" namísto atoi(argv[1]) tohoto článku. Znovu sestavit aplikaci s manifestu _UNICODE namísto _MBCS. Pokud aplikace používá MFC, je ve výchozím nastavení použit verzi Unicode knihovny MFC. Odkazují na další informace o programování Unicode knihovna MSDN.
  3. Pokud aplikace používá pouze jednobajtové znakové sady (SBCS), znovu sestavit aplikaci bez manifestu _MBCS. Pokud aplikace používá funkce MFC CString, bude stále zaznamenáte tento problém MBCS protože MFC je integrována s _MBCS ve výchozím nastavení. Arounds dva možné práce pro tento případ jsou následující:
    • Přidat \MFC\SRC\Strex.cpp projektu a potom kompilovat bez _MBCS. Soubor Strex.cpp implementuje funkce CString. To pravděpodobně nebude fungovat, pokud aplikace používá knihovny MFC nepřímo jiných DLL uživatele, které jsou používány aplikace použití funkcí MFC CString.
    • Znovu sestavit knihovny MFC s MBCS = 0. Přidání souboru MFC42.LIB "Ignorovat knihovny" nastavení projektu a propojit vlastní knihovny MFC s aplikací. Odkazovat technika Poznámka TN033 "Opětovné sestavení the MFC DLL" postupy.

Prohlášení

Společnost Microsoft potvrzuje, že se jedná o chybu v produktech společnosti uvedených na začátku tohoto článku. Tento problém byl poprvé opraven v systému Windows 2000 Service Pack 2.

Další informace

Kroky pro reprodukci tohoto chování

  • Vytvoření projektu aplikace konzoly Win32 s následujícím kódem:
    #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;
    }
    						

  • Sestavení aplikace pomocí souboru Msvcrt.dll run-time knihovny DLL s více podprocesy. Projekt je integrována s direktivou _MBCS procesoru ve výchozím nastavení a _istspace() mapovány na _ismbcspace(). Tato aplikace spuštěna pomaleji na Windows 2000 a Windows ME než v systému Windows NT 4.0 a Windows 9 x.

Odkazy

"Řetězců: Přehled," "vícebajtová znakové sady (MBCS): Přehled, „ a „ Programming Unicode: Přehled" v MSDN pod dokumentace Visual C++ nebo Visual C++ Programmer Průvodce / přidání programu funkčnosti /Overviews.

TN033: Verze DLL MFC

Vlastnosti

ID článku: 264795 - Poslední aktualizace: 30. ledna 2014 - Revize: 3.3
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
Klíčová slova: 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbbug kbcrt kbfix KB264795 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku: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