1

C#とC ++で記述された、相互に通信するさまざまなアプリケーションがあります。私が書いたいくつかのシナリオでこの環境をテストしたいと思います。

各シナリオは異なる時間実行されます。

シナリオを数分で実行するためにすべてを加速する方法はありますか?

アプリケーションにはThread.Sleep(...)、C++の一部または同等のものが含まれている場合があります。

私の考えでは、Thread.Sleep(2000)通常は2秒間待機しますが、加速すると200ミリ秒しか待機しません。

残念ながら、アプリケーションのコードを変更またはリファクタリングすることはできません。

私が持っている最初のアイデアは、「高速化されたWindows」システムでアプリケーションを実行することです。時間が速くなるOSの一種のラッパー。しかし、私はこれをどのように達成するかについてはわかりません。

したがって、新しいアイデアや解決策は素晴らしいでしょう。

ありがとう

4

1 に答える 1

1

「Windowsの実行速度を上げる」ことは実用的ではないと思いますが、Sleep()メソッド呼び出しをインターセプトして短絡することを検討します。私は調べていませんが、Thread.Sleep()はおそらくどこかでWin32APIまたはNTAPI(http://msdn.microsoft.com/en-us/library/windows/desktop/ms686298(v= vs.85).aspx)。

Windows SDKのdepends.exeとデバッガーを使用して、コードが何を使用しているかを確認できますが、(特に知らない限り)それは単にSleep()呼び出しではなく、呼び出しである可能性が高いと思います。 WaitForMultipleObjectsEx()とその仲間を使用して、システムオブジェクト、I / O、またはトリガーを待機しています。

APIインターセプトに関するMicrosoftResearchの迂回路をご覧くださいhttp://msdn.microsoft.com/en-us/library/windows/desktop/ms686298(v=vs.85).aspx

このテーマについては、ジェフリー・リヒターとマット・ピエトレックによるさまざまな著作もあります。実際、これらの1つに触発されたcodeprojectの記事があります。

http://www.codeproject.com/Articles/5178/DLL-Injection-and-function-interception-tutorial

于 2012-10-11T10:18:11.053 に答える