問題タブ [mono]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
performance - リモーティングを介した mono サーバー アプリケーションへのアクセスのパフォーマンス
これが私の設定です。Web ページでも使用できる機能を実装する、ローカル クライアント マシン用の .NET アプリケーションを作成しました。この例を単純にするために、クライアントが、データを入力してデータを取得できるソフトウェアをインストールすると仮定します。
アイデアは、ユーザーが同じデータを入力し、上記と同じ結果を返すフォームを保持する Web ページを作成することです。同社の Web サーバーが利用可能であるため、最初のアイデアは mono Web サービスを作成することでしたが、これは不明な理由で却下されました。「サービス」は Web サービスとして実行されるのではなく、PHP スクリプトによって呼び出される必要があります。これは現在、PHP から shell_exec を介して mono アプリケーションを呼び出すことで実現されています。
だから今、私は自分のアプリケーションのモノポートで立ち往生しています。これは正常に動作しますが、実行に時間がかかりすぎます。不要な dll やメソッドなどはすべて削除しましたが、コマンド ライン経由でアプリケーションを呼び出し、コマンドライン パラメーター経由で目的のデータを送信すると、約 700 ミリ秒かかります。1 秒あたり約 10 ヒットが予想されるため、これは、このタスク用に多数のサーバーをセットアップする場合にのみ機能します。
700m は毎回アプリケーションを開始するコストに関連していると思います。リクエストを 1 回または 500 回しか処理しない場合、時間の点で大きな違いはないからです (元の入力を少し変更して実行します)。毎回「新しい」データで 500 回の反復. 2 回目の反復から開始すると、処理時間は反復ごとに約 1ms に低下します)
次に考えたのは、mono アプリケーションをリモーティング サーバーとしてセットアップすることでした。これにより、アプリケーションを 1 回起動するだけで、着信要求を処理できるようになります。そのため、クライアントとして機能する別の mono アプリケーションを作成しました。クライアントを呼び出し、クライアントにデータをサーバーに渡させ、結果を取得するのに 344 ミリ秒かかるようになりました。これは優れていますが、それでも私が期待し、望んでいたよりもずっと遅いです。
その後、このブログ投稿に基づいて新しいプロジェクトをゼロから実装しましたが、同じパフォーマンスの問題に悩まされています。
問題は、クライアント/サーバーの速度を向上させる可能性のあるモノプロジェクトに関連する何かが欠けているのでしょうか? このタスクのために Web サービスを作成するという考えは却下されましたが、リモート処理は Web サービスよりも高速であると言われていますが、Web サービスはこれらの状況でより優れたパフォーマンスを発揮しますか?
私はそれをより明確にすることができましたが、Webサービスを実装することは現在オプションではありません(理由は聞かないでください、私は要件を書きませんでした;))
その間、リモート シナリオで最も時間がかかるのは実際にクライアントの起動であることを確認しました。
コマンド ラインからパイプ経由でサーバーにアクセスすることは想像できますが、これは私のシナリオに最適です。これはソケットを使用して行われると思いますか?
command-line - コマンドライン経由で実行中の mono アプリケーションにアクセスする
コマンドライン (Linux/Unix) から実行中の mono アプリケーションにアクセスする最良の方法は何ですか?
例: mono サーバー アプリケーションが実行されており、コマンド ラインを使用して可能な限り軽量/最速の方法でコマンドを送信し、サーバーが応答 (例: stdout) を送り返したいと考えています。
c# - C# Mono - 低レベルのキーボード フック
CodeProject.com で見つけた低レベルのキーボード フック用のコードを使用しています。唯一の問題は、mono では動作しない外部 DLL 呼び出しを使用していることです。そのコードと同じことを達成する方法を誰かが知っているかどうか疑問に思っていましたが、.net を使用する Windows と mono を使用する Linux の両方で実行できますか?
編集:私がやろうとしていることを明確にする:アプリケーションのようなダッシュボードを作成しています。プログラムはシステム トレイにあり、ユーザーがホットキーを押すと、すべてのガジェットがポップアップ表示されます。したがって、プログラムにはフォーカスがないため、通常はキーストロークをキャッチしません。そのため、低レベルのキーボード フックを使用し、ユーザーがホットキーとして定義する 2 つのキーをフックします。しかし、私はそのために Windows DLL 呼び出しを使用していますが、これはモノを使用する Linux では機能しません。同じことを行う方法があるかどうか疑問に思っていますが、モノを使用してLinuxで実行できますか?
c# - C#の汎用インターフェイスはボクシングを妨げますか? (.NET vs Mono パフォーマンス)
型として宣言された特定のメソッド パラメーターを持つ C# インターフェイスがありobject
ます。ただし、渡される実際の型は、インターフェイスを実装するクラスによって異なる場合があります。
byte[]
MyClass2 の問題は、 to と fromの変換が boxing と unboxing であることですobject
。これは、パフォーマンスに影響を与える計算コストの高い操作です。
この問題を汎用インターフェイスで解決すると、ボックス化/ボックス化解除が回避されますか?
これは .NET と Mono でどのように実装されていますか? どちらのプラットフォームでもパフォーマンスへの影響はありますか?
ありがとうございました!
c# - ディスパッチ中に C# でイベントを登録すると、そのディスパッチ中に再度呼び出されないことが保証されますか?
C# では、同じイベントのディスパッチの途中で、イベントのメソッドを登録したくなることがあります。たとえば、同じイベントの連続するディスパッチに基づいて状態を遷移させるクラスがある場合、最初の状態のハンドラーを登録解除し、2 番目のハンドラーを登録することができます。ただし、次にイベントが発生するまで、2 番目のハンドラーをディスパッチしたくありません。
良いニュースは、C# の Microsoft 実装がまさにこのように動作するように見えることです。イベント登録構文の砂糖は、System.Delegate.Combine への呼び出しに置き換えられます。これは、現在の呼び出しリストと新しいメソッドを別のリストに連結し、それをイベント プロパティに割り当てるだけです。これにより、まさに私が望む動作が得られます。
だから、私の質問は: これは言語標準によって保証された動作ですか? 私は自分の C# コードを他のプラットフォームで mono の下で実行できるようにしたいと考えており、一般的に、その実装に基づいて言語標準について推測していないことを確認したいと考えています。
MSDN で決定的な情報を見つけることができませんでした。
私が話していることの具体的な例が必要な場合は、ここに例を示します。
少なくとも Windows では、出力は次のようになります。
.net - ユニバーサルオーディオファイルのデコード用の.NETライブラリはありますか?
いくつかの種類のオーディオファイルをデコードできる.NETライブラリを知っていますか?理想的には、プラットフォームに依存しないため、Windowsおよび*NIXで.NETおよびMonoで使用できます。
私はすでに自分のニーズに合った図書館を探してグーグルを拷問しましたが、残念ながら何も見つかりませんでした。そのため、GStreamerやその友人のために多くのラッパークラスを作成する前に、ここで質問できると思いました。:)
サポートされているオーディオファイルは(少なくとも)
- MP3、
- OGG Vorbis、および
- FLAC(オプション)。
私がこれを必要とするアプリケーションはただの楽しみのためであるため、ライブラリはオープンソースであるか、少なくとも無料である必要があります。また、私はこれをサービスプロセスに入れることを計画しているので、ユーザーに表示されるナグ画面はおそらく悪いか実用的ではないでしょう。
オーディオファイルをデコードし、byte []をlibOFAラッパーに渡すために、このライブラリ/これらのライブラリを使用する必要があります。これにより、MusicDNSフィンガープリントを生成できます。私の実験的なアプリケーションは、おそらくLinuxベースのサーバーで実行されます。
.net - mono .NET プロジェクトは、最も人気のある Linux ディストリビューションの最新リリースに含まれていますか?
mono.net は、Ubuntu、Kubuntu、Fedora、およびその他の一般的なディストリビューションのデフォルト インストールに含まれているのでしょうか?
もしそうなら、主にLinuxを対象とした新しいGUIアプリケーションを開発するためにそれを使用しない正当な理由がある人はいますか?
.net - Mono .NET Windows.Forms はどの GUI フレームワークで実装されていますか?
Mono .NET Windows.Forms はどの GUI フレームワークで実装されていますか?
例: KDE、Gnome、X11 自体?
c# - Linux での C# 開発用の IDE は?
私のオプションは何ですか?1 年以上前に MonoDevelop を試しましたが、非常にバグが多かったです。最新版は安定した開発環境ですか?
mono - Monoのコードカバレッジ?
mcs コンパイラを使用すると、mono は .mdb ファイルと呼ばれる独自のデバッグ ターゲットを作成します。
Mono で NCover または別のコード カバレッジ ツールを使用する方法はありますか?
コマンドライン ツールの方が優れているため、継続的インテグレーション サーバーに追加できます。