Share via


Visual Studio 2017'deki C++ yenilikleri

Visual Studio 2017, C++ ortamına birçok güncelleştirme ve düzeltme getirir. Derleyici ve araçlarda 250'den fazla hatayı düzeltip sorunları bildirdik. Birçoğu, Geri Bildirim Gönder altındaki Sorun Bildir ve Öneri Sağla seçenekleri aracılığıyla müşteriler tarafından gönderildi. Hataları bildirdiğiniz için teşekkür ederiz!

Tüm Visual Studio'daki yenilikler hakkında daha fazla bilgi için bkz . Visual Studio 2017'deki yenilikler. Visual Studio 2019'da C++ ile ilgili yenilikler hakkında bilgi için bkz . Visual Studio 2019'da C++ için yenilikler. Visual Studio 2015 ve önceki sürümlerde C++ ile ilgili yenilikler hakkında bilgi için bkz . Visual C++ Yenilikler 2003 ile 2015 arasında. C++ belgelerindeki yenilikler hakkında bilgi için bkz . Microsoft C++ belgeleri: Yenilikler.

Visual Studio 2017 C++ derleyicisi

C++ uyumluluğu geliştirmeleri

Bu sürümdeki C++ derleyicisini ve standart kitaplığını C++11 ve C++14 özellikleri için gelişmiş destekle güncelleştirdik. Ayrıca, C++17 standardında olması beklenen belirli özellikler için ön desteği de içerir. Ayrıntılı bilgi için bkz . Visual Studio 2017'de C++ Uyumluluk Geliştirmeleri.

Visual Studio 2017 sürüm 15.5

Derleyici yapılandırılmış bağlamalar, lambdalarif constexpr, , satır içi değişkenler, constexpr katlama ifadeleri ve tür sistemine ekleme noexcept dahil olmak üzere C++17'de yeni olan özelliklerin yaklaşık %75'ini destekler. Bu özellikler seçeneği altında /std:c++17 kullanılabilir. Daha fazla bilgi için bkz . Visual Studio 2017'de C++ Uyumluluk Geliştirmeleri

Visual Studio 2017 sürüm 15.7 Sürüm Notları

Visual Studio sürüm 15.7'deki MSVC derleyici araç takımı artık C++ Standard ile uyumludur. Daha fazla bilgi için bkz . Duyuru: MSVC C++ Standardınave Microsoft C/C++ dili uyumluluğuna uygundur.

Visual Studio 2017 sürüm 15.8

Derleyici /experimental:preprocessor anahtarı, sonunda tüm geçerli C ve C++ standartlarına uygun olacak yeni deneysel MSVC ön işlemcisini etkinleştirir. Daha fazla bilgi için bkz . MSVC yeni ön işlemciye genel bakış.

Yeni derleyici seçenekleri

  • /permissive-: Tüm katı standartlar uyumluluk derleyicisi seçeneklerini etkinleştirin ve Microsoft'a özgü derleyici uzantılarının çoğunu devre dışı bırakın (örneğin, değil __declspec(dllimport)). Visual Studio 2017 sürüm 15.5'te bu seçenek varsayılan olarak açıktır. /permissive- Uyumluluk modu, iki aşamalı ad arama desteği içerir. Daha fazla bilgi için bkz . Visual Studio'da C++ Uyumluluk Geliştirmeleri.

  • /diagnostics: Tanılama hatasının veya uyarı konumunun üç farklı şekilde görüntülenmesini sağlar: yalnızca satır numarası, satır numarası ve sütunu ya da sorunlu kod satırının altında bir şapka işareti olan satır numarası ve sütun.

  • /debug:fastlink: Tüm hata ayıklama bilgilerini PDB dosyasına kopyalamayarak %30'a kadar daha hızlı artımlı bağlantı sürelerini (Visual Studio 2015'e karşı) etkinleştirin. PDB dosyası bunun yerine yürütülebilir dosyayı oluşturmak için kullanılan nesne ve kitaplık dosyalarının hata ayıklama bilgilerini gösterir. Visual Studio'da C++ derlemelerini hızlandırmak için bkz. VS "15" ile /Debug:fastlink daha hızlı C++ derleme döngüsü ve Öneriler.

  • Visual Studio 2017 ile /awaitkullanılmasına /sdl izin verir. Coroutines ile ilgili /RTC sınırlamayı kaldırdık.

Visual Studio 2017 sürüm 15.3
  • /std:c++14 ve /std:c++latest: Bu derleyici seçenekleri, bir projede ISO C++ programlama dilinin belirli sürümlerini kabul etmenizi sağlar. Yeni taslak standart özelliklerinin çoğu seçenek tarafından /std:c++latest korunur.

  • /std:c++17 derleyicisi tarafından uygulanan C++17 özellikleri kümesini etkinleştirir. Bu seçenek, C++17'den sonraki özellikler için derleyici ve standart kitaplık desteğini devre dışı bırakır: Çalışma Taslağı'nın sonraki sürümlerinde değiştirilen veya yeni olan ve C++ Standardının hata güncelleştirmeleri. Bu özellikleri etkinleştirmek için kullanın /std:c++latest.

Codegen, güvenlik, tanılama ve sürüm oluşturma

Bu sürüm iyileştirme, kod oluşturma, araç takımı sürüm oluşturma ve tanılamada çeşitli iyileştirmeler getirir. Bazı önemli geliştirmeler şunlardır:

  • Döngüler için geliştirilmiş kod oluşturma: sabit tam sayıları bölme işlemleri için otomatik vektörleştirme desteği, memset desenlerinin daha iyi tanınması.
  • Geliştirilmiş kod güvenliği: Arabellek taşması derleyici tanılamalarının emisyonu iyileştirildi ve /guard:cf şimdi atlama tabloları oluşturan switch deyimlerini korur.
  • Sürüm oluşturma: Yerleşik ön işlemci makro _MSC_VER değeri artık her Visual C++ araç takımı güncelleştirmesinde monoton olarak güncelleştiriliyor. Daha fazla bilgi için bkz . Visual C++ Derleyici Sürümü.
  • Yeni araç takımı düzeni: Derleyici ve ilgili derleme araçlarının geliştirme makinenizde yeni bir konumu ve dizin yapısı vardır. Yeni düzen, derleyicinin birden çok sürümünün yan yana yüklemelerini etkinleştirir. Daha fazla bilgi için bkz . Visual Studio 2017'de Derleyici Araçları Düzeni.
  • Geliştirilmiş tanılama: Çıkış penceresi artık hatanın oluştuğu sütunu gösterir. Daha fazla bilgi için bkz . VS "15" Önizleme 5'te C++ derleyici tanılama geliştirmeleri.
  • Coroutines kullanılırken deneysel anahtar sözcük verimi (seçenek kapsamında /await kullanılabilir) kaldırıldı. Bunun yerine kodunuz kullanılacak co_yield şekilde güncelleştirilmelidir. Daha fazla bilgi için bkzyield. VS 2017'de olmak co_yield için anahtar sözcük.
Visual Studio 2017 sürüm 15.3

Derleyicideki tanılamalarda yapılan geliştirmeler. Daha fazla bilgi için bkz . Visual Studio 2017 15.3.0'da Tanılama Geliştirmeleri.

Visual Studio 2017 sürüm 15.5

Visual C++ çalışma zamanı performansı, daha iyi oluşturulan kod kalitesiyle geliştirmeye devam eder. Artık kodunuzu yeniden derleyebilirsiniz ve uygulamanız daha hızlı çalışır. Bazı derleyici iyileştirmeleri, koşullu skaler depoların vektörleştirilmesi, çağrıların sin(x) ve yeni sincos(x)bir içine birleştirilmesi ve cos(x) SSA iyileştiricisinden yedekli yönergelerin ortadan kaldırılması gibi yepyenidir. Diğer derleyici iyileştirmeleri, koşullu ifadeler için vektörleştirici buluşsal yöntemleri, daha iyi döngü iyileştirmeleri ve float min/max codegen gibi mevcut işlevlere yönelik iyileştirmelerdir. Bağlayıcının yeni ve daha hızlı /OPT:ICF bir uygulaması vardır ve bu da %9'a kadar bağlantı süresi hızlandırmalarına neden olabilir ve artımlı bağlamada başka performans düzeltmeleri de vardır. Daha fazla bilgi için bkz . /OPT (İyileştirmeler) ve /INCREMENTAL (Artımlı Bağlantı).

Microsoft C++ derleyicisi Intel'in AVX-512'sini destekler. AVX-512 ile 128 bit ve 256 bit genişliğinde yazmaçlarda yeni işlevler getiren Vektör Uzunluğu yönergelerine sahiptir.

Bu /Zc:noexceptTypes- seçenek, genel olarak C++17 modu kullanılırken C++14 sürümüne noexcept geri dönmek için kullanılabilir. Bu seçenek, tüm kodunuzu aynı anda yeniden yazmak zorunda kalmadan kaynak kodunuzu C++17'ye uyacak şekilde güncelleştirmenizi throw() sağlar. Daha fazla bilgi için bkz . Dinamik özel durum belirtimi kaldırma ve noexcept.

Visual Studio 2017 sürüm 15.7 Sürüm Notları
  • Kurgusal yürütme yan kanal saldırılarına karşı azaltmaya yardımcı olmak için yeni derleyici anahtarı /Qspectre . Daha fazla bilgi için bkz . MSVC'de spectre risk azaltmaları.
  • Spectre azaltma için yeni tanılama uyarısı. Daha fazla bilgi için bkz . Visual Studio 2017 Sürüm 15.7 Önizleme 4'te Spectre tanılaması.
  • /Zc, için yeni bir değer, /Zc:__cplusplusC++ standart desteğinin doğru raporlamasını sağlar. Örneğin, anahtar ayarlandığında ve derleyici modda /std:c++17 olduğunda değer olarak 201703Lgenişletilir. Daha fazla bilgi için bkz. MSVC şimdi __cplusplus doğru şekilde bildiriyor.

C++ standart kütüphanesi

Doğruluk Geliştirmeleri

Visual Studio 2017 RTM (sürüm 15.0)
  • Küçük basic_string_ITERATOR_DEBUG_LEVEL != 0 tanılama geliştirmeleri. Bir IDL denetimi dize makinelerinde sabitlendiğinde, artık seyahate neden olan davranışı bildirir. Örneğin, "dize yineleyicisi başvurulamıyor" yerine "aralık dışında olduğundan dize yineleyicisi başvurulamıyor (örneğin, bir son yineleyici)" alırsınız.
  • Daha önce kodun std::promise sonsuza kadar engellenmesine neden olabilen taşıma atama işleci düzeltildi.
  • için örtük dönüştürme T*ile atomic<T*> derleyici hataları düzeltildi.
  • pointer_traits<Ptr> şimdi doğru algılar Ptr::rebind<U>.
  • Çıkarma işlecinde move_iterator eksik const bir niteleyici düzeltildi.
  • ve propagate_on_container_move_assignmentisteyen propagate_on_container_copy_assignment durum bilgisi olan kullanıcı tanımlı ayırıcılar için sessiz hatalı kod oluşturma düzeltildi.
  • atomic<T> şimdi aşırı yüklenmiş olarak tolere eder operator&().
  • Yanlış bind() çağrılar için biraz geliştirilmiş derleyici tanılaması.

Visual Studio 2017 RTM'de daha fazla standart kitaplık geliştirmesi vardır. Tam liste için bkz. VS 2017 RTM'de C++ Ekip Blogu girdisi Standart Kitaplık Düzeltmeleri.

Visual Studio 2017 sürüm 15.3
  • Standart kitaplık kapsayıcıları artık yerine öğesini olarak sıkıştırır max_size()max()numeric_limits<difference_type>::max()size_type. Bu değişiklik, kapsayıcıdaki yineleyicilerin sonucunun distance() dönüş türünde distance()gösterilebilir olmasını sağlar.
  • Eksik özelleştirme auto_ptr<void>düzeltildi.
  • for_each_n()Uzunluk bağımsız değişkeni tam sayı türünde değilse, daha önce , generate_n()ve search_n() algoritmaları derlenemiyordu. Artık nonintegral uzunluklarını yineleyicilerin öğesine dönüştürmeye çalışırlar difference_type.
  • normal_distribution<float> artık standart kitaplığın içinde çiftten float'a daraltmayla ilgili uyarılar yaymaz.
  • Boyut taşması üst sınırı denetimi yerine max_size() kullanılan npos bazı basic_string işlemler düzeltildi.
  • condition_variable::wait_for(lock, relative_time, predicate) sahte bir uyanışın olması durumunda göreli sürenin tamamını beklerdi. Şimdi göreli sürenin yalnızca tek bir aralığını bekler.
  • future::get() şimdi standardın futuregerektirdiği gibi öğesini geçersiz kılar.
  • iterator_traits<void *> oluşturmaya çalıştığından void&, artık "yineleyici mi" SFINAE koşullarında kullanımına iterator_traits izin vermek için temiz bir şekilde boş bir yapıya dönüşür.
  • Clang -Wsystem-headers tarafından bildirilen bazı uyarılar düzeltildi.
  • Ayrıca Clang -Wmicrosoft-exception-spectarafından bildirilen "bildirimdeki özel durum belirtimi önceki bildirimle eşleşmiyor" düzeltildi.
  • Ayrıca Clang ve C1XX tarafından bildirilen mem-initializer-list sıralama uyarıları düzeltildi.
  • Sıralanmamış kapsayıcılar, kapsayıcıların kendileri değiştirildiğinde karma işlevlerini veya koşullarını değiştirmedi. Şimdi yapıyorlar.
  • Birçok kapsayıcı değiştirme işlemi artık işaretlenir noexcept (standart kitaplığımız hiçbir zaman eşit olmayanpropagate_on_container_swap ayırıcı olmayan tanımlanmamış davranış koşulunu algılarken bir özel durum oluşturma niyetinde değildir).
  • Birçok vector<bool> işlem artık olarak işaretlenir noexcept.
  • Standart kitaplık artık geri çevirme kaçış taramasıyla eşleşen ayırıcıyı value_type (C++17 modunda) zorlar.
  • içine kendi kendine aralık eklemenin basic_string dizelerin içeriğini karıştırdığı bazı koşullar düzeltildi. (Not: Vektörlere kendi kendine aralık ekleme hala Standart tarafından yasaklanmıştır.)
  • basic_string::shrink_to_fit() artık ayırıcının tarafından etkilenmez propagate_on_container_swap.
  • std::decay şimdi, cv-qualified, ref-qualified veya her ikisi de olan ayrıntılı işlev türlerini, yani işlev türlerini işler.
  • Uygun büyük/küçük harf duyarlılığı ve eğik çizgi kullanacak şekilde değiştirilen yönergeler taşınabilirliği artırır.
  • C4061 "'numaralandırma' sabit listesi anahtarındaki 'numaralandırıcı' numaralandırıcısı bir servis talebi etiketi tarafından açıkça işlenmiyor" uyarısı düzeltildi. Bu uyarı varsayılan olarak kapalıdır ve standart kitaplığın uyarılar için genel ilkesinde özel durum olarak düzeltildi. (Standart kitaplık temizdir /W4 , ancak temiz olmaya /Wall çalışmaz. Varsayılan olmayan uyarıların çoğu olağan dışı bir şekilde gürültülü olur ve düzenli olarak kullanılması amaçlanmamıştır.)
  • Geliştirilmiş std::list hata ayıklama denetimleri. Liste yineleyicileri şimdi öğesini denetler operator->()ve list::unique() şimdi yineleyicileri geçersiz olarak işaretler.
  • içindeki tupleuses-allocator meta programlaması düzeltildi.
Visual Studio 2017 sürüm 15.5
  • std::partitionşimdi standart gerektirdiği gibi koşul sürelerini N + 1 zaman yerine çağırırN.
  • Sürüm 15.3'teki sihirli statikleri önleme girişimleri sürüm 15.5'te onarılır.
  • std::atomic<T> artık varsayılan olarak oluşturulabilir olmasını gerektirmez T .
  • Yineleyici hata ayıklama etkinleştirildiğinde logaritmik süreye sahip yığın algoritmaları farklı davranır. Artık girişin aslında bir yığın olduğunu belirten doğrusal bir zaman onayı yapmazlar.
  • __declspec(allocator) artık Clang'den gelen ve bu declspec'i anlamayan uyarıları önlemek için yalnızca C1XX için korunuyor.
  • basic_string::npos artık derleme zamanı sabiti olarak kullanılabilir.
  • std::allocatorC++17 modunda artık, tarafından devre dışı bırakılmadığı /Zc:alignedNew-sürece, hizalaması değerinden max_align_tbüyük olan fazla hizalanmış türlerin ayırmasını düzgün bir şekilde işler. Örneğin, 16 bayt veya 32 bayt hizalamalı nesne vektörleri artık SSE ve AVX yönergeleri için düzgün hizalanır.

Uyumluluk geliştirmeleri

  • Herhangi bir>, <string_view>, apply(), make_from_tuple()ekledik<.
  • İsteğe bağlı>, <değişken>, shared_ptr::weak_typeve <cstdalign> eklendi<.
  • , , max(initializer_list)ve minmax(initializer_list)minmax_element()min_element()max_element()içinde min(initializer_list)C++14 constexpr etkinleştirildi.

Daha fazla bilgi için bkz . Microsoft C/C++ dil uyumluluğu.

Visual Studio 2017 sürüm 15.3
  • Diğer birkaç C++17 özelliği uygulanmıştır. Daha fazla bilgi için bkz . Microsoft C++ dil uyumluluğu tablosu.
  • "Değişken ve isteğe bağlı kopyalama/taşıma önemsizliğini yaymalıdır" P0602R0 uygulandı.
  • Standart kitaplık artık /GR- seçeneği aracılığıyla dinamik RTTI'nin devre dışı bırakılmasına resmi olarak tolerans gösterir. rethrow_if_nested() Hem hem de dynamic_pointer_cast() doğası gereği, dynamic_caststandart kitaplık bunları altında /GR-olarak =delete işaretler.
  • Dinamik RTTI aracılığıyla devre dışı bırakıldığında /GR-bile biçimindeki "statik RTTI" typeid(SomeType) hala kullanılabilir ve birkaç standart kitaplık bileşenine güç sağlar. Standart kitaplık artık aracılığıyla /D_HAS_STATIC_RTTI=0bu özelliği devre dışı bırakmayı da destekliyor. Bu bayrak, ve öğesinin target() ve target_type() üye işlevlerini ve get_deleter() ve 'nin std::weak_ptrstd::functionstd::shared_ptr arkadaş üye işlevini de devre dışı bırakırstd::any.
  • Standart kitaplık artık koşullu olarak tanımlanmış makrolar yerine koşulsuz olarak C++14 constexpr kullanıyor.
  • Standart kitaplık artık dahili olarak diğer ad şablonlarını kullanıyor.
  • Standart kitaplık artık yerine şirket içinde nullptr_t{}kullanırnullptr. (NULL'nin iç kullanımı yok edildi. Null olarak 0 iç kullanımı aşamalı olarak temizleniyor.)
  • Standart kitaplık artık stilsel olarak yanlış kullanım std::forward()yerine dahili olarak kullanırstd::move().
  • olarak #error messagedeğiştirildistatic_assert(false, "message"). Derlemeyi hemen durdurduğundan #error bu değişiklik derleyici tanılamalarını geliştirir.
  • Standart kitaplık artık işlevlerini olarak __declspec(dllimport)işaretlemez. Modern bağlayıcı teknolojisi artık buna ihtiyaç duymaz.
  • Varsayılan şablon bağımsız değişkenlerine ayıklanan SFINAE, dönüş türlerine ve işlev bağımsız değişken türlerine kıyasla dağınıklığı azaltıyor.
  • Rastgele> hata ayıklama denetimleri <artık olarak adlandırılan fputs() iç işlevi _Rng_abort()yerine standart kitaplığın olağan makinelerini stderrkullanır. Bu işlevin uygulaması ikili uyumluluk için tutulur. Standart kitaplığın sonraki ikili uyumsuz sürümünde kaldıracağız.
Visual Studio 2017 sürüm 15.5
  • C++17 standardına göre çeşitli standart kitaplık özellikleri eklendi, kullanım dışı bırakıldı veya kaldırıldı. Daha fazla bilgi için bkz . Visual Studio'da C++ uyumluluk geliştirmeleri.
  • Aşağıdaki paralel algoritmalar için deneysel destek:
    • all_of
    • any_of
    • for_each
    • for_each_n
    • none_of
    • reduce
    • replace
    • replace_if
    • sort
  • Aşağıdaki paralel algoritmalar için imzalar eklenir ancak şu anda paralelleştirilmemiştir. Profil oluşturma, yalnızca öğeleri hareket ettiren veya çalıştıran algoritmaları paralelleştirmenin hiçbir faydasını göstermedi:
    • copy
    • copy_n
    • fill
    • fill_n
    • move
    • reverse
    • reverse_copy
    • rotate
    • rotate_copy
    • swap_ranges
Visual Studio 2017 sürüm 15.6
  • <memory_resource>
  • KitaplıkLa İlgili Temel Bilgiler V1
  • Atama siliniyor polymorphic_allocator
  • Sınıf şablonu bağımsız değişken kesintisini iyileştirme
Visual Studio 2017 sürüm 15.7 Sürüm Notları
  • Paralel algoritma desteği artık deneysel değildir
  • Yeni bir uygulama: <filesystem>
  • Temel dize dönüştürmeleri (kısmi)
  • std::launder()
  • std::byte
  • hypot(x,y,z)
  • Gereksiz çürümeyi önleme
  • Matematiksel özel işlevler
  • constexpr char_traits
  • Standart kitaplık için kesinti kılavuzları

Daha fazla bilgi için bkz . Microsoft C/C++ dil uyumluluğu.

Performans ve aktarım hızı düzeltmeleri

  • Aşırı basic_string::find(char) yüklemeler yalnızca bir kez çağrılır traits::find . Daha önce, 1 uzunluğunda bir dize için genel bir dize araması olarak uygulanıyordu.
  • basic_string::operator== şimdi dizelerin içeriğini karşılaştırmadan önce dizenin boyutunu denetler.
  • derleyici iyileştiricisinin çözümlemesi zor olan içindeki basic_stringdenetim eşleştirmesi kaldırıldı. Tüm kısa dizeler için çağrının reserve sıfırdan farklı bir maliyeti yoktur.
  • std::vector doğruluk ve performans için elden geçirildi: Ekleme ve yerleştirme işlemleri sırasında diğer ad ekleme artık Standart'ın gerektirdiği şekilde doğru şekilde işleniyor, ve diğer mantık aracılığıyla move_if_noexcept() Standart tarafından gerektiğinde güçlü özel durum garantisi sağlanıyor ve ekleme ve yerleştirme işlemi daha az öğe işlemi gerçekleştiriyor.
  • C++ standart kitaplığı artık null süslü işaretçilerin başvurularını kaldırmayı önlüyor.
  • Geliştirilmiş weak_ptr::lock() performans.
  • Derleyici aktarım hızını artırmak için C++ standart kitaplık üst bilgileri artık gereksiz derleyici iç bilgilerine yönelik bildirimler eklemekten kaçınır.
  • Oluşturucuların std::string performansını üçten std::wstring fazla artırıp taşıma.
Visual Studio 2017 sürüm 15.3
  • ile noexceptetkileşimler üzerinde çalışıldı ve bu da uygulamanın Yapılandırılmış Özel Durum İşleme (SEH) kullanan işlevlere dahil edilmesini std::atomic engelledi.
  • Standart kitaplığın iç _Deallocate() işlevi daha küçük kodlara göre iyileştirilerek daha fazla yerde çizilmesine olanak tanındı.
  • Özyineleme yerine paket genişletmesi kullanılacak şekilde değiştirildi std::try_lock() .
  • std::lock() Kilitlenme önleme algoritması, tüm kilitlerde döndürmek try_lock() yerine işlemleri kullanacak lock() şekilde iyileştirildi.
  • içinde Adlandırılmış Dönüş Değeri İyileştirmesi etkinleştirildi system_category::message().
  • conjunction ve disjunction şimdi türler yerine türlerin N + 1 örneğini 2N + 2 oluşturur.
  • std::function artık her tür silme çağrılabilen için ayırıcı destek makineleri örneği oluşturmaz, aktarım hızını artırır ve birçok farklı lambda'yı std::functionileten programlarda .obj boyutunu azaltır.
  • allocator_traits<std::allocator>yalnızca (çoğu kodda) aracılığıyla allocator_traits etkileşim kuran koddaki kod boyutunu azaltarak el ile std::allocator satır std::allocator içi işlemler içerir.
  • C++11 en düşük ayırıcı arabirimi artık ayırıcıyı bir iç sınıfta _Wrap_allocsarmalamak yerine doğrudan standart kitaplık çağrısı allocator_traits tarafından işlenir. Bu değişiklik ayırıcı desteği için oluşturulan kod boyutunu azaltır, iyileştiricinin bazı durumlarda standart kitaplık kapsayıcıları hakkında düşünme becerisini artırır ve daha iyi bir hata ayıklama deneyimi sağlar (artık hata ayıklayıcı yerine _Wrap_alloc<your_allocator_type> ayırıcı türünüzü görürsünüz).
  • Ayırıcıların özelleştirmesine izin verilmeyen özelleştirilmiş allocator::referenceiçin meta programlama kaldırıldı. (Ayırıcılar kapsayıcıların süslü işaretçiler kullanmasını sağlayabilir, ancak süslü başvurular kullanamaz.)
  • Derleyici ön ucuna döngüler için aralık tabanlı yineleyicilerin hatalarını ayıklamayı kaldırması öğretildi ve hata ayıklama derlemelerinin performansı artırıldı.
  • basic_string ve reserve() için shrink_to_fit() iç küçültme yolu artık işlemleri yeniden ayırma yolunda olmadığından, tüm sessize alan üyelerin kod boyutunu küçültür.
  • İç basic_string büyüme yolu artık yolunda shrink_to_fit()değildir.
  • Mutating basic_string işlemleri artık ayrılmayan hızlı yol ve yavaş yol işlevleri ayırarak ortak yeniden ayrılmama olayının çağıranlara satır içi olarak eklenmesini daha olası hale getirerek hesaba katılmış olur.
  • Sessize basic_string alma işlemleri artık yeniden boyutlandırma yerine tercih edilen durumda yeniden ayrılmış arabellekler oluşturur. Örneğin, dizenin başındaki bir ekleme artık eklemeden sonra içeriği tam olarak bir kez taşır. Aşağı veya yeni ayrılan arabelleğe taşınır. Artık yeniden ayırma durumunda ilk önce yeni ayrılan arabelleğe ve ardından aşağı doğru iki kez taşınmaz.
  • Dizede <> C standart kitaplığını çağıran işlemler artık TLS ile yinelenen etkileşimi kaldırmak için adresi önbelleğe alırerrno.
  • Uygulamayı basitleştirdi is_pointer .
  • İşlev tabanlı İfade SFINAE'sini ve void_ttabanlı olarak struct değiştirme işlemi tamamlandı.
  • Standart kitaplık algoritmaları artık soncrementing yineleyicilerinden kaçınıyor.
  • 64 bit sistemlerde 32 bit ayırıcılar kullanılırken kesme uyarıları düzeltildi.
  • std::vector taşıma ataması, mümkün olduğunda arabelleği yeniden kullanarak POCMA olmayan eşit ayırıcı olmayan durumda artık daha verimlidir.
Visual Studio 2017 sürüm 15.5
  • basic_string<char16_t> artık aynı memcmp, memcpyve benzer iyileştirmeleri basic_string<wchar_t> devreye alır.
  • Visual Studio 2015 Güncelleştirme 3'teki "işlevleri kopyalamaktan kaçınma" çalışmamızın kullanıma sunduğu işlev işaretçilerinin çizili olmasını engelleyen bir iyileştirici sınırlaması lower_bound(iter, iter, function pointer)üzerinde çalışıldı ve performansı geri yüklendi.
  • Yineleyici hata ayıklamasının , set_difference, set_symmetric_differenceve set_union girişlerini includessıralama doğrulamasının yükü, sırayı denetlemeden önce yineleyicilerin işaretini kaldırarak azaltıldı.
  • std::inplace_merge şimdi zaten konumda olan öğeleri atlar.
  • std::random_device Oluşturma artık oluşturmaz ve sonra bir std::stringyok eder.
  • std::equal ve std::partition yineleyici karşılaştırmasını kaydeden bir atlama iş parçacığı iyileştirme geçişi vardı.
  • İşaretçiler önemsiz olarak kopyalanabilir Tolarak geçirildiğindestd::reverse, artık el yazısı vektörleştirilmiş bir uygulamaya gönderilir.
  • std::fill, std::equalve std::lexicographical_compare ve için std::byte ve memcmp (ve gsl::byte diğer char benzeri sabit listeleri ve sabit listesi sınıfları) için nasıl dağıtıldığı memset öğretildi. std::copy kullanılarak is_trivially_copyablegönderimler olduğundan herhangi bir değişikliğe gerek yoktu.
  • Standart kitaplık artık, türleri önemsiz olarak yok edilemez hale getirmek için tek davranışı olan boş ayraç yıkıcıları içermiyor.

Diğer kitaplıklar

Açık kaynak kitaplık desteği

Vcpkg , Visual Studio'da açık kaynak C++ statik kitaplıkları ve DLL'leri alma ve oluşturma işlemini büyük ölçüde kolaylaştıran bir açık kaynak komut satırı aracıdır. Daha fazla bilgi için bkz . vcpkg.

CPPRest SDK 2.9.0

Visual Studio 2017 sürüm 15.5

C++ için platformlar arası bir web API'si olan CPPRestSDK, 2.9.0 sürümüne güncelleştirildi. Daha fazla bilgi için bkz . CppRestSDK 2.9.0 GitHub'da kullanılabilir.

ATL

Visual Studio 2017 sürüm 15.5
  • Yine de başka bir ad arama uyumluluğu düzeltmeleri kümesi
  • Mevcut taşıma oluşturucuları ve taşıma ataması işleçleri artık düzgün bir şekilde kaldırılmayan olarak işaretleniyor
  • atlstr.h'de yerel statiklerin iş parçacığı güvenli başlatması hakkında geçerli uyarı C4640'ı kaldırma
  • DLL oluşturmak için ATL kullanılırken XP araç takımında yerel statiklerin iş parçacığı güvenli başlatması otomatik olarak kapatıldı. Şimdi değil. İş parçacığı güvenli başlatma istemiyorsanız Proje ayarlarınıza ekleyebilirsiniz /Zc:threadSafeInit- .

Visual C++ çalışma zamanı

  • Control Flow Guard sembolleri için yeni üst bilgi "cfguard.h".

Visual Studio 2017 C++ IDE

  • Yapılandırma değiştirme performansı, C++ yerel projeleri için daha iyi, C++/CLI projeleri için ise çok daha iyi bir duruma geldi. Bir çözüm yapılandırması ilk kez etkinleştirildiğinde daha hızlıdır ve bu çözüm yapılandırmasının sonraki tüm etkinleştirmeleri neredeyse anında gerçekleştirilir.
Visual Studio 2017 sürüm 15.3
  • Çeşitli proje ve kod sihirbazları, imza iletişim kutusu stilinde yeniden yazıldı.
  • Sınıf Ekle artık doğrudan Sınıf Ekle sihirbazını başlatır. Daha önce burada bulunan diğer tüm öğeler artık Yeni Öğe Ekle > altında kullanılabilir.
  • Win32 projeleri artık Yeni Proje iletişim kutusundaki Windows Masaüstü kategorisinin altındadır.
  • Windows Konsolu ve Masaüstü Uygulaması şablonları artık sihirbaz görüntülemeden projeleri oluşturur. Aynı kategorinin altında eski Win32 Konsol Uygulaması sihirbazıyla aynı seçenekleri görüntüleyen yeni bir Windows Masaüstü Sihirbazı vardır.
Visual Studio 2017 sürüm 15.5

Yeniden düzenleme ve kod gezintisi için IntelliSense altyapısını kullanan birkaç C++ işlemi çok daha hızlı çalışır. Aşağıdaki sayılar, 3500 proje içeren Visual Studio Chromium çözümünü temel alır:

Özellik Performans İyileştirme
Yeniden Adlandır 5,3x
İmzayı Değiştir 4,5x
Tüm Başvuruları Bul 4,7x

C++ artık Ctrl+Tıklama Tanıma Git'i desteklemektedir ve bu da tanımlara fareyle gezinmeyi kolaylaştırır. Productivity Power Tools paketindeki Yapı Görselleştiricisi artık varsayılan olarak ürüne de dahildir.

IntelliSense

  • Yeni SQLite tabanlı veritabanı altyapısı artık varsayılan olarak kullanılıyor. Yeni altyapı Tanıma Git ve Tüm Başvuruları Bul gibi veritabanı işlemlerini hızlandırır. İlk çözüm ayrıştırma süresini önemli ölçüde artırır. Ayar, Araçlar > Seçenekler Metin Düzenleyicisi > C/C++ > Gelişmiş'e> taşındı. (Daha önce ... C/C++ > Deneysel.)

  • Önceden derlenmiş üst bilgileri kullanmayan projelerde ve dosyalarda IntelliSense performansını geliştirdik. Geçerli dosyadaki üst bilgiler için Otomatik Önceden Derlenmiş Üst Bilgi oluşturuldu.

  • Hata listesindeki IntelliSense hataları için hata filtreleme ve yardım özelliği ekledik. Şimdi hata sütununa tıklandığında filtreleme sağlanıyor. Ayrıca, belirli hatalara tıklandığında veya F1 tuşuna basıldığında, hata iletisi için çevrimiçi bir arama başlatılır.

    Error List.

    Error List Filtered.

  • Üye Listesi öğelerini türe göre filtreleme özelliği eklendi.

    Member List Filtering.

  • Üye Listesinde görünenlere bağlamsal olarak duyarlı filtreleme sağlayan yeni bir deneysel Tahmine Dayalı IntelliSense özelliği eklendi. Daha fazla bilgi için bkz . C++ IntelliSense Geliştirmeleri - Tahmine Dayalı IntelliSense ve Filtreleme.

  • Tüm Başvuruları Bul (Shift+F12) artık karmaşık kod temellerinde bile kolayca gezinmenize yardımcı olur. Başvurularınızı net bir şekilde anlayabilmek için gelişmiş gruplandırma, filtreleme, sıralama, sonuçlarda arama ve (bazı diller için) renklendirme sağlar. C++ için yeni kullanıcı arabirimi, bir değişkenden okuma veya değişkene yazma hakkında bilgi içerir.

  • Noktadan Oka IntelliSense özelliği deneyselden gelişmişe taşındı ve artık varsayılan olarak etkinleştirildi. Düzenleyicide Kapsamları Genişlet ve Önceliği Genişlet özellikleri deneyselden gelişmişe taşındı.

  • İmzayı Değiştir ve İşlevi Ayıkla deneysel yeniden düzenleme özellikleri artık varsayılan olarak kullanılabilir.

  • C++ projeleri için deneysel bir 'Daha hızlı proje yükü' özelliği eklendi. Bir C++ projesini bir sonraki açışınızda daha hızlı yüklenir ve bundan sonraki süre çok daha hızlı yüklenir!

  • Bu özelliklerden bazıları diğer diller için ortaktır ve bazıları C++ diline özeldir. Bu yeni özellikler hakkında daha fazla bilgi için bkz . Visual Studio "15" Önizleme 5 Duyuruları.

Visual Studio 2017 sürüm 15.7 Sürüm Notları

Klasör Aç ile MSBuild dışı projeler

Visual Studio 2017, Klasör Aç özelliğini tanıtır. Herhangi bir çözüm veya proje oluşturmaya gerek kalmadan kaynak kodu içeren bir klasörde kod oluşturmanıza, derlemenize ve hata ayıklamanıza olanak tanır. Artık projeniz MSBuild tabanlı bir proje olmasa bile Visual Studio'yu kullanmaya başlamak daha kolaydır. Klasör Aç güçlü kod anlama, düzenleme, oluşturma ve hata ayıklama özelliklerine erişmenizi sağlar. Bunlar, Visual Studio'nun MSBuild projeleri için zaten sağladığıyla aynıdır. Daha fazla bilgi için bkz . C++ için Klasör projelerini açma.

  • Klasör Aç deneyimi geliştirmeleri. Deneyimi şu .json dosyaları aracılığıyla özelleştirebilirsiniz:
    • IntelliSense ve göz atma deneyimini özelleştirmek için CppProperties.json.
    • Derleme adımlarını özelleştirmek için Tasks.json.
    • Hata ayıklama deneyimini özelleştirmek için Launch.json.
Visual Studio 2017 sürüm 15.3
  • Alternatif derleyiciler ve MinGW ve Cygwin gibi derleme ortamları için geliştirilmiş destek. Daha fazla bilgi için bkz . Visual C++ ile MinGW ve Cygwin kullanma ve Klasörü Aç.
  • CppProperties.json ve CMake Ayarlar.json'da genel ve yapılandırmaya özgü ortam değişkenlerini tanımlama desteği eklendi. Bu ortam değişkenleri, launch.vs.json dosyasında tanımlanan hata ayıklama yapılandırmaları ve tasks.vs.json içindeki görevler tarafından kullanılabilir. Daha fazla bilgi için bkz . Visual C++ ile Ortamınızı Özelleştirme ve Klasörü Aç.
  • CMake'nin Ninja oluşturucusunun 64 bit platformları kolayca hedefleme özelliği de dahil olmak üzere geliştirilmiş desteği.

Klasör Aç aracılığıyla CMake desteği

Visual Studio 2017, MSBuild proje dosyalarına (.vcxproj) dönüştürmeden CMake projelerini kullanma desteği sunar. Daha fazla bilgi için bkz . Visual Studio'da CMake projeleri. Klasör Aç ile CMake projelerinin açılması, ortamı C++ düzenleme, oluşturma ve hata ayıklama için otomatik olarak yapılandırılır.

  • C++ IntelliSense, kök klasörde bir CppProperties.json dosyası oluşturmaya gerek kalmadan çalışır. Kullanıcıların CMake ve CppProperties.json dosyaları tarafından sağlanan yapılandırmalar arasında kolayca geçiş yapmalarını sağlamak için yeni bir açılan liste ekledik.

  • CMakeLists.txt dosyasıyla aynı klasörde yer alan CMakeSettings.json dosyasıyla ek yapılandırma gerçekleştirilmesi desteklenir.

    CMake Open Folder.

Visual Studio 2017 sürüm 15.3
  • CMake Ninja oluşturucu için destek eklendi.
Visual Studio 2017 sürüm 15.4
  • Mevcut CMake önbelleklerini içeri aktarma desteği eklendi.
Visual Studio 2017 sürüm 15.5

Windows masaüstü geliştirme

Özgün C++ iş yükünü yüklemek için şimdi daha ayrıntılı bir yükleme deneyimi sağlıyoruz. Yalnızca ihtiyacınız olan araçları yüklemenize olanak tanıyan seçilebilir bileşenler ekledik. Yükleyici kullanıcı arabiriminde listelenen bileşenler için belirtilen yükleme boyutları yanlıştır ve toplam boyutu hafife alır.

C++ masaüstü iş yükünde Win32 projelerini başarıyla oluşturabilmek için, hem araç takımını hem de Windows SDK’yi yüklemelisiniz. Çalıştığından emin olmak için önerilen (seçili) VC++ 2017 v141 araç takımını (x86, x64) ve Windows 10 SDK'sını (10.0.nnnnn) yükleyin. Gerekli araçlar yüklenmezse projeler başarıyla oluşturulmaz ve sihirbaz yanıt vermeyi durdurur.

Visual Studio 2017 sürüm 15.5

Visual C++ Derleme araçları (daha önce tek başına bir ürün olarak kullanılabilir) artık Visual Studio Yükleyicisi bir iş yükü olarak eklenmiştir. Bu iş yükü, Visual Studio IDE'yi yüklemeden yalnızca C++ projeleri oluşturmak için gereken araçları yükler. Hem v140 hem de v141 araç kümeleri dahildir. v141 araç takımı, Visual Studio 2017 sürüm 15.5'teki en son geliştirmeleri içerir. Daha fazla bilgi için bkz. Visual Studio Derleme Araçları şimdi VS2017 ve VS2015 MSVC Araç Kümeleri'ni içerir.

C++ ile Linux geliştirme

Popüler Linux Geliştirme için Visual C++ eklentisi artık Visual Studio’nun bir parçasıdır. Bu yükleme, Linux ortamında çalışan C++ uygulamalarını geliştirmek ve hatalarını ayıklamak için ihtiyacınız olan her şeyi sağlar.

Visual Studio 2017 sürüm 15.2

Platformlar arası kod paylaşımı ve tür görselleştirmesinde iyileştirmeler yapıldı. Daha fazla bilgi için bkz . Platformlar arası kod paylaşımı ve tür görselleştirmesi için Linux C++ geliştirmeleri.

Visual Studio 2017 sürüm 15.5
  • Linux iş yükü, dosyaları uzak Linux makineleriyle eşitlemek için sftp'ye alternatif olarak rsync desteği ekledi.
  • ARM mikrodenetleyicilerini hedefleyen çapraz derleme desteği eklendi. Yüklemede etkinleştirmek için C++ ile Linux geliştirme iş yükünü seçin ve Katıştırılmış ve IoT Geliştirme seçeneğini belirleyin. Bu seçenek ARM GCC çapraz derleme araçlarını ve Make'i yüklemenize ekler. Daha fazla bilgi için bkz . Visual Studio'da ARM GCC Çapraz Derleme.
  • CMake için destek eklendi. Artık mevcut CMake kod tabanınızı Visual Studio projesine dönüştürmek zorunda kalmadan çalışabilirsiniz. Daha fazla bilgi için bkz . Linux CMake Projesi Yapılandırma.
  • Uzak görevleri çalıştırmak için destek eklendi. Bu özellik, Visual Studio'nun Bağlantı Yöneticisi tanımlanan uzak bir sistemde herhangi bir komutu çalıştırmanıza olanak tanır. Uzak görevler, uzak sisteme dosya kopyalama özelliği de sağlar. Daha fazla bilgi için bkz . Linux CMake Projesi Yapılandırma.
Visual Studio 2017 sürüm 15.7 Sürüm Notları

C++ ile oyun geliştirme

C++’ın gücünü kullanarak DirectX veya Cocos2d tarafından desteklenen profesyonel oyunlar oluşturun.

Android ve iOS için C++ ile mobil geliştirme

Artık Visual Studio kullanarak Android ve iOS platformlarını hedefleyebilen mobil uygulamalar geliştirebilir ve hatalarını ayıklayabilirsiniz.

Evrensel Windows Uygulamaları

C++, Evrensel Windows Uygulaması iş yükü için isteğe bağlı bir bileşen olarak sağlanır. Şu anda C++ projelerini el ile yükseltmeniz gerekir. Visual Studio 2017'de v140 hedefli bir Evrensel Windows Platformu projesi açabilirsiniz. Ancak Visual Studio 2015 yüklü değilse proje özellik sayfalarında v141 platform araç takımını seçmeniz gerekir.

Evrensel Windows Platformu üzerinde C++ için yeni seçenekler (UWP)

Artık Evrensel Windows Platformu ve Windows Mağazası için C++ uygulamaları yazmak ve paketlemek için yeni seçenekleriniz var: Masaüstü Köprüsü altyapısı, mevcut masaüstü uygulamanızı veya COM nesnenizi Windows Mağazası aracılığıyla dağıtım için paketlemenizi sağlar. Alternatif olarak, dışarıdan yükleme yoluyla mevcut kanallarınız aracılığıyla dağıtım için de. Windows 10'daki yeni özellikler, masaüstü uygulamanıza çeşitli yollarla UWP işlevselliği eklemenize olanak tanır. Daha fazla bilgi için bkz. Masaüstü Köprüsü.

Visual Studio 2017 sürüm 15.5

Masaüstü uygulamalarının Masaüstü Köprüsü ile paketlenmesi büyük ölçüde kolaylaştıran bir Windows Uygulaması Paketleme Projesi proje şablonu eklenir. Dosya | altında kullanılabilir Yeni | Proje | Yüklendi | Visual C++ | Evrensel Windows Platformu. Daha fazla bilgi için bkz. Visual Studio kullanarak uygulama paketleme (Masaüstü Köprüsü).

Yeni kod yazarken artık yalnızca üst bilgi dosyalarında uygulanan Windows Çalışma Zamanı için standart bir C++ dil projeksiyonu olan C++/WinRT kullanabilirsiniz. Standartlara uygun herhangi bir C++ derleyicisini kullanarak Windows Çalışma Zamanı API'leri kullanmanıza ve yazmanıza olanak tanır. C++/WinRT, C++ geliştiricilerine modern Windows API'sine birinci sınıf erişim sağlamak için tasarlanmıştır. Daha fazla bilgi için bkz . C++/WinRT.

Windows SDK Insider Preview'ın 17025 derlemesinde başlayan C++/WinRT, Windows SDK'sında yer alır. Daha fazla bilgi için bkz. C++/WinRT artık Windows SDK'sını içeriyor.

Clang/C2 platform araç takımı

Visual Studio 2017 ile birlikte gelen Clang/C2 araç takımı artık büyük projeler oluşturmak için çok önemli olan anahtarı destekliyor /bigobj . Ayrıca hem derleyici ön uçta hem de arka uçta birkaç önemli hata düzeltmesi içerir.

C++ kod analizi

C++ Temel Yönergeleri’nin uygulanmasını sağlayan C++ Temel Denetleyicileri artık Visual Studio ile dağıtılmaktadır. Projenin özellik sayfalarında kod çözümleme uzantıları sayfasında damalarını etkinleştirin. Kod analizini çalıştırdığınızda uzantılar eklenir. Daha fazla bilgi için bkz . C++ Temel Yönergeleri denetleyicisini kullanma.

Screenshot of the Property Pages dialog box showing Configuration Properties > Code Analysis > General selected and a number of Core Checks listed in teh Run this rule set section.

Visual Studio 2017 sürüm 15.3
  • Kaynak yönetimiyle ilgili kurallar için destek eklendi.
Visual Studio 2017 sürüm 15.5
  • Yeni C++ Çekirdek Yönergeleri denetimleri akıllı işaretçi doğruluğunu, genel başlatıcıların doğru kullanımını ve ve hatalı atamalar gibi goto yapıların kullanımlarını işaretlemeyi kapsar.

  • 15.3'te bulabileceğiniz bazı uyarı numaraları artık 15.5'te kullanılamaz. Bu uyarıların yerine daha belirgin denetimler kullanıma sunuldu.

Visual Studio 2017 sürüm 15.6
Visual Studio 2017 sürüm 15.7 Sürüm Notları

Visual Studio 2017'de birim testi

Visual Studio 2017 sürüm 15.5

Google Test Bağdaştırıcısı ve Boost.Test Bağdaştırıcısı artık C++ iş yüküyle Masaüstü Geliştirme'nin bileşenleri olarak kullanılabilir. Bunlar Test Gezgini ile tümleşik olarak bulunur. CMake projeleri için CTest desteği eklenir (Klasör Aç kullanılarak), ancak Test Gezgini ile tam tümleştirme henüz sağlanmamıştır. Daha fazla bilgi için bkz . C/C++ için birim testleri yazma.

Visual Studio 2017 sürüm 15.6
  • Dinamik kitaplık desteği için Boost.Test destek eklendi.
  • Boost.Test Artık IDE'de bir öğe şablonu kullanılabilir.

Daha fazla bilgi için bkz Boost.Test . Birim Testi: Dinamik Kitaplık desteği ve Yeni Öğe Şablonu.

Visual Studio 2017 sürüm 15.7 Sürüm Notları

C++ birim testi projeleri için CodeLens desteği eklendi. Daha fazla bilgi için bkz . C++ Birim Testi için CodeLens Duyuruları.

Visual Studio grafik tanılaması

Visual Studio Grafik Tanılama araçları: Direct3D uygulamalarında işleme ve performans sorunlarını kaydetmek ve çözümlemek için bunları kullanabilirsiniz. Bunları Windows bilgisayarınızda, Bir Windows cihaz öykünücüsunda veya uzak bir bilgisayarda veya cihazda yerel olarak çalışan uygulamalarda kullanın.

  • Köşe ve Geometri gölgelendiricileri için Giriş ve Çıkış: Köşe gölgelendiricilerinin ve geometri gölgelendiricilerinin giriş ve çıkışını görüntüleme özelliği en çok istenen özelliklerden biri olmuştur. Artık araçlarda desteklenmektedir. Aşağıdaki tabloda giriş ve çıkışını incelemeye başlamak için İşlem Hattı Aşamaları görünümünde VS veya GS aşamasını seçin.

    Input/Output for shaders.

  • Nesne tablosunda arama ve filtreleme: Aradığınız kaynakları bulmak için hızlı ve kolay bir yol sağlar.

    Screenshot of the Object Table section with the Type drop-down and Search text box called out.

  • Kaynak Geçmişi: Bu yeni görünüm, yakalanan bir çerçevenin işlenmesi sırasında kullanılan kaynağın tüm değişiklik geçmişini görmenin kolay bir yolunu sağlar. Herhangi bir kaynağın geçmişini çağırmak için kaynak köprülerinin yanındaki saat simgesine tıklayın.

    Resource history.

    Kaynağın değişiklik geçmişiyle doldurulmuş yeni Kaynak Geçmişi araç penceresini görüntüler.

    Resource history change.

    Tam çağrı yığını yakalama özelliği etkinken çerçeveleri yakalayabilirsiniz. Bu, her değişiklik olayının bağlamını hızla çıkarmanıza ve Visual Studio projenizde incelemenize olanak tanır. Grafik Tanılama altındaki Visual Studio Araçları > Seçenekleri iletişim kutusunda tam yığın yakalama seçeneğini ayarlayın.

  • API İstatistikleri: Çerçevenizdeki API kullanımının üst düzey bir özetini görüntüleyin. Hiç yapmadığınızı fark etmeyebilecek aramaları veya çok sık yaptığınız aramaları keşfetmek için kullanışlıdır. Bu pencere, Visual Studio Grafik Çözümleyicisi'nde API İstatistiklerini Görüntüle > aracılığıyla kullanılabilir.

    API stats.

  • Bellek İstatistikleri: Sürücünün çerçevede oluşturduğunuz kaynaklar için ne kadar bellek ayıracağını görüntüleyin. Bu pencere, Visual Studio Grafik Çözümleyicisi'nde Bellek İstatistiklerini Görüntüle > aracılığıyla kullanılabilir. Elektronik tabloda görüntülemek üzere verileri CSV dosyasına kopyalamak için sağ tıklayın ve Tümünü Kopyala'yı seçin.

    Memory stats.

  • Çerçeve Doğrulama: Yeni hatalar ve uyarılar listesi, Direct3D hata ayıklama katmanı tarafından algılanan olası sorunlara göre olay listenizde gezinmek için kolay bir yol sağlar. Pencereyi açmak için Visual Studio Grafik Çözümleyicisi'nde Çerçeve Doğrulamayı Görüntüle'ye > tıklayın. Ardından çözümlemeyi başlatmak için Doğrulamayı Çalıştır'a tıklayın. Çerçevenin karmaşıklık düzeyine bağlı olarak tamamlanması birkaç dakika sürebilir.

    Frame validation.

  • D3D12 için Çerçeve Analizi: Çekme çağrısı performansını yönlendirilmiş "durum" denemeleriyle analiz etmek için Çerçeve Analizi'ni kullanın. Çerçeve Analizi sekmesine geçin ve raporu görüntülemek için analizi çalıştırın.

    Frame analysis.

  • GPU Kullanımı geliştirmeleri: Açık izlemeler, daha ayrıntılı analiz için GPUView veya Windows Performans Analizi (WPA) aracıyla Visual Studio GPU Kullanımı profil oluşturucu aracılığıyla alınabilir. Windows Performans Araç Seti'ni yüklediyseniz, biri WPA için, diğeri GPUView için, oturuma genel bakışın sağ alt kısmında olmak üzere iki köprü vardır.

    GPU usage.

    Bu bağlantı aracılığıyla GPUView'da açtığınız izlemeler eşitlenmiş VS ve GPUView zaman çizelgesi yakınlaştırma ve kaydırma desteği sağlar. VS'deki onay kutusu eşitlemenin etkinleştirilip etkinleştirilmediğini denetler.

    GPUView.