#include "stdafx.h" using namespace System; ref class refclass { public: int i; }; ref class refclass2 { public: int i; }; void a(Object^ obj) { refclass^ i = static_cast(obj); i->i++; } void b(Object^ obj) { refclass^ i = safe_cast(obj); i->i++; } void e(Object^ obj) { refclass^ i = dynamic_cast(obj); if ( i != nullptr ) { i->i++; } } void f(Object^ obj) { refclass2^ i = dynamic_cast(obj); if ( i != nullptr ) { i->i++; } } void c(Object^ obj) { try { refclass^ i = safe_cast(obj); i->i++; } catch(System::InvalidCastException^ e) { } } void d(Object^ obj) { try { refclass2^ i = safe_cast(obj); i->i++; } catch(System::InvalidCastException^ e) { } } int main() { System::Diagnostics::Stopwatch^ wat = gcnew System::Diagnostics::Stopwatch(); refclass^ r = gcnew refclass(); Object^ obj = static_cast(r); Int64 i; wat->Start(); for ( i = 0; i < 999999999; i++) { a(obj); } wat->Stop(); System::Console::WriteLine(wat->ElapsedMilliseconds); wat->Reset(); wat->Start(); for ( i = 0; i < 999999999; i++) { b(obj); } wat->Stop(); System::Console::WriteLine(wat->ElapsedMilliseconds); wat->Reset(); wat->Start(); for ( i = 0; i < 999999999; i++) { c(obj); } wat->Stop(); System::Console::WriteLine(wat->ElapsedMilliseconds); wat->Reset(); wat->Start(); for ( i = 0; i < 9999; i++) { d(obj); } wat->Stop(); System::Console::WriteLine(wat->ElapsedMilliseconds); wat->Reset(); wat->Start(); for ( i = 0; i < 999999999; i++) { e(obj); } wat->Stop(); System::Console::WriteLine(wat->ElapsedMilliseconds); wat->Reset(); wat->Start(); for ( i = 0; i < 999999999; i++) { f(obj); } wat->Stop(); System::Console::WriteLine(wat->ElapsedMilliseconds); }