Azure DevTest Labs および Azure VM の自動シャットダウン機能の設定時刻について

こんにちは、Visual Studio サポート チームです。 今回は、Azure DevTest Labs および Azure VM の自動シャットダウン機能 (*1) を設定した時刻と、実際にシャットダウンが行われる実行タイミングの関係について、ご案内します。 設定内容によっては、意図したタイミングでシャットダウンできないケースがありますので、本稿が参考になりましたら幸いです。   (*1) Azure DevTest Labs は、アプリケーションのテスト環境となる VM を Azure 上に構築・管理し、アプリケーションのデプロイプロセスにテスト環境のプロビジョニングを組み込んで、テスト環境の構築に要するコストを削減するためのサービスです。Azure VM の自動シャットダウン機能も、DevTest Labs から提供されています。 Azure DevTest Labs とは https://docs.microsoft.com/ja-jp/azure/lab-services/devtest-lab-overview   現象 DevTest Labs または Azure VM で、自動シャットダウンの設定したにも関わらず、設定当日に対象 VM の自動シャットダウンが実行されない場合があります。   原因 本現象は、自動シャットダウン機能の想定された動作に依存して発生している可能性があります。 DevTest Labs および Azure VM の自動シャットダウン機能では、設定を行った時点から所定の時間間隔をあけて実行される必要があり、この間隔が短いと当日のシャットダウンは行われず、翌日の当該時刻にシャットダウンが実行される動作となります。 この所定の時間間隔の目安は、通知機能 (Email または Webhook) の設定に応じて以下とおりとなっています。   通知機能を有効にしている場合 : 31 分間 通知機能を無効にしている場合 : 1 分間   以下に、具体的な設定と、想定される結果の例を示します。  …


Visual Studio 2015 および Visual C++ 2017 のリンク時のコード生成における最適化の不具合について

こんにちは、Visual Studio サポート チームです。 今回は、Visual C++ 2015 および Visual C++ 2017 で確認されている、C++ プロジェクトのリンク時のコード生成における最適化の不具合についてご案内します。 なお、この事象については報告が非常に少なく現在も修正に向けて調査中ですが、進展があり次第この記事を更新する予定です。   現象 以下の条件を満たす場合に、仮想関数呼び出しが正常に行われず基底クラスのメンバー関数が実行される場合があります。 速度優先の最適化 (/O2 オプションもしくは /Ox オプション) を指定している。 リンク時のコード生成 (/LTCG オプション) を指定している。 プログラム全体の最適化 (/GL オプション) を指定している。 仮想関数の呼び出しと仮想関数の実装が異なるバイナリ間で行われている。   原因 本現象は弊社製品の不具合に起因して発生しています。 Visual C++ コンパイラーおよびリンカーは、呼び出される仮想関数がコード生成時に静的に決定でき、かつ最適化によるパフォーマンスの向上が見込めると判断した場合、devirtualization と呼ばれる仮想関数呼び出しを直接呼び出しに置き換える最適化を行います。 リンク時のコード生成が指定されている場合、仮想関数の呼び出しと仮想関数の実装が異なるバイナリ間で行われている場合も devirtualization が試みられますが、仮想関数ではなく基底クラスの関数が呼び出されるコードが生成される場合があります。   回避策 以下のいずれかの方法でリンク時のコード生成における devirtualization の最適化を無効化することで、この問題を回避できます。 コンパイラー オプションで /d2notypeopt を指定する リンカー オプションで /d2:-notypeopt オプションを指定する…