2016-05-27 10 views
2

私が最近取り組んでいるXamarinプロジェクトでは、開発者がJava.Lang.ThreadSystem.Threading.Threadを使用していたことがわかります。 )。Xamarin - Java.Lang.ThreadとSystem.Threading.Thread - どちらを使用しますか?

私は(つまり、それが同様に適切に配置されていますことを確認するので、それだけで理にかなっているThreadクラスはIDisposableをから継承しているXamarinプロジェクトにjava.lang.Threadのを使用しての背後にある理由が何であるか疑問に思ってそれは余分なコードです)。

ザマリンエコシステムではどのようなパフォーマンスが向上しますか?
基本的に交換可能ですか?私はちょうどSystem.Threading.Threadが標準Disposable pattern from Microsoftの安全な一回の実施である、CriticalFinalizerObjectから派生していることに言及したい

+0

私はdownvoteを理解していません。あなたがdownvote場合、あなたはそれを説明することができるはずです。 –

+0

私はXamarinの専門家ではありませんが、C#コードが最終的にJavaに変換されるので、同じであるべきだと思います。 – Sweeper

+1

@ Sweeperこれは誤ったステートメントで、C#(またはF#、...)コードはJavaに変換されず、ILベースであり、Android NDKベースのアプリケーションにラップされたMonoランタイムで実行されます。 Java ART VMは、ブリッジを介して利用できるようになっているため、Android Java SDKにアクセスできます。 – SushiHangover

答えて

2

は、派生クラス内のすべてのファイナライズコードはそれほど重要でマークされていることを確認します。

Java.Lang.Threadでは、IDisposableインターフェイスのみが実装されています。

これらのクラスのもう1つの違いは、定義が少し異なります。のは、ドキュメントのを見てみましょう:

java.lang.Threadのクラス

Threadは、並列実行単位です。呼び出されるメソッド、引数、およびローカル変数に対して独自の呼び出しスタックを持ちます。各アプリケーションには、開始時に実行されている少なくとも1つのスレッド、メインスレッドThreadGroupのメインスレッドがあります。ランタイムは、独自のスレッドをシステムスレッドグループに保持します。

リンクされた記事では、スレッドグループの使用が古くなったと考えられています。

System.Threading.Threadクラス

プロセスは、プロセスに関連付けられたプログラム・コードの部分を実行する1つ以上のスレッドを作成することができます。スレッドによって実行されるプログラムコードを指定するには、ThreadStartデリゲートまたはParameterizedThreadStartデリゲートを使用します。 ParameterizedThreadStartデリゲートを使用すると、スレッドプロシージャにデータを渡すことができます。

また、それは_Threadから派生:

は、アンマネージコードにThreadクラスを公開します。

このインタフェースは、アンマネージコードからマネージクラスにアクセスするためのものであるとマネージコードから呼び出すことはできません。

Javaのスレッドは、JVM内の論理構造であり、C#ではなく、管理対象ではないものです。ある実装と別の実装のリソースを測定し、それに応じて使用するクラスを決定することをお勧めします。

多くのコードが.NET側に基づいている場合は、CLR実装を使用することをお勧めします。それ以外の場合は、JVM実装を使用する必要があると思います。

関連する問題