• 締切済み

mscorlib.dllがボトルネック?

競馬の解析ソフトをvisualBasicで作成しているのですが、ビルドしたexeファイルをコピーして1台のPCでソフトを多重起動すると極端に実行速度が遅くなります。多重起動したソフト毎に参照しているデータベースやテキストデータは分けているので、この部分はボトルネックではないと考えています。 Visual studio2019で動作を解析したところ、mscorlib.dllの実行に掛かる時間が長いようなので、この部分に負荷が集中しているのかと想像しています。 ソフトの多重起動によりmscorlib.dllの負荷が増加し、この部分がボトルネックになるということはあり得るのでしょうか? 趣味のため独学で開発してきており、プログラミングの基礎などよくわかりませんが、もしかして常識的なことなのでしょうか? どなたかわかる方いたらよろしくお願いいたします。

みんなの回答

回答No.4

https://www.amd.com/ja/support/kb/faq/cpu-pb2 上記のサイトには以下の記述があります。 テクノロジーは自動ですが、Precision Boost 2による性能の利点を最大限に活用するには、PCで実行しなければならない構成手順があります。 この手順には以下が含まれます。 プロセッサーに適切なサーマル・ペーストを確保する 正しく取り付けられた適切なクーラーでCPUを構成する PCが高品質のケースファンを搭載しており、適切な外部からの空気の流れがあることを確認する 信頼性が高く最適化された設定でマザーボードBIOSを構成する Windows® 10の最新バージョンでPCを構成する 最新のAMDチップセット・ドライバー・ソフトウェアをインストールする マザーボードをメーカー最新のBIOSに更新する Precision Boost 2はいくつかの要因に依存するため、上記の手順は ★非常に重要★となります。 達成される最大ブースト周波数と持続的なブースト条件は、アプリケーションと作業負荷に依存します。 軽い作業負荷では最高のブースト周波数が発生しますが、より重いマルチコアのタスクや持続的な作業負荷では制限に達する確率が高くなるため、 ★ブーストの程度が低くなる★ことにご注意ください。 上記サイトは以下のサイトの先にあったものです。 https://www.amd.com/ja/products/cpu/amd-ryzen-7-3800x ずいぶん良い機体を使われているようで羨ましいです。 それはそうと、上記の条件と照らし合わせて、問題の原因になっていないかを、今一度ご確認されてみてはいかがでしょうか? CPU の性能を生かしきれていないと思われるのは、もしかしたらこの辺に原因があるのかもしれません。

回答No.3

ひとつ聞いていいですか? メモリー64GBって凄く多いと思うのですが、俺の言っているメモリーと違います? デスクトップパソコンだから多いのかな? 俺の言っているメモリーとは、RAM のことですよ。 通常、市販のパソコンは大抵は8GB、 多くて16GB くらいだと思います。 自分で64GB に増設されたってことでしょうか? Doutor333444 さんの言うメモリーって、もしかしてストレージ容量のことなのかな?とも思いまして、端末のRAM はOSの設定からPC情報と検索してみると確認できると思います。 RAM は何GB になってます?

Doutor333444
質問者

補足

使用しているパソコンは自作したもので、メモリーは64GBで間違いありません。 CPUはRyzen7-3800Xですが、現状はCPUパワーを使い切れていない所が不満なため質問させていただきました。

回答No.2

>多重起動したソフト毎に参照しているデータベースやテキストデータは分けているので、この部分はボトルネックではないと考えています。 多重起動したソフトごとに データベースなどを分けている なら、その分メモリーを使用しているのではないでしょうか? だから重いのだと考えられると思います。 あるいは、創られたソフトに欠陥があるのかも。 俺は素人なのでビルドってよく分かりませんが、動かせるようにして実行させたって意味でしょう? プログラムに欠陥があったら、そりゃあシステムが変な所を延々とループして計算しているという事も、あり得るのではないかと素人としては思ってしまいますが、そんな事はないのでしょうか? 待っていれば結果が出るのなら、「延々と」ってことはないでしょうけど、もっと効率よく回せるかもしれないと言うことはないのでしょうか? mscorlib.dllがボトルネックかどうかは分かりませんが、メモリーを増設したら軽くできるのではないかと思います。 mscorlib.dllがボトルネックかという専門的な質問するのなら、技術者が答えてくれそうなカテゴリーで質問された方が良いかと。

Doutor333444
質問者

お礼

ご回答いただきありがとうございます。 このソフトを10個ほど起動した場合でもCPUの使用率は30%ほど、メモリについても64GBの容量に対して10GBの使用量となっており、この部分がボトルネックとは考えにくいのです。 専門的な内容になるようなので、質問するカテゴリーをもう一度考えてみます。 ありがとうございました。

  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.1

普通に、CPUの処理能力とかメモリの容量とかネット回線が細いとかではないのかな? 多重起動だと、その辺がボトルネックになるけど。

Doutor333444
質問者

お礼

ご回答いただきありがとうございます。 ご指摘の点は確認したのですが、ソフトを10個ほど動かした場合でもCPUの使用率は30%ほど、メモリ使用量も64GBに対して10GBとなっています。その状態から更にソフトを起動してもCPU使用率は上がらず、ソフトの動作が遅くなっていくのです。 専門的な内容のようですので、質問するカテゴリーをもう一度考えてみます。 ありがとうございました。

関連するQ&A

  • gogo.dllの読み込みについて

    MarineCatさんの「午後のこーだ利用の手引き」にあるサンプルプログラムを参考に、gogo.dllをVisual C++2005で使いたいのですが、ビルド完了し、実行すると「保護されているメモリに読み込みまたは書き込みを行おうとしました。」とのエラーが発生しました。何が悪いのか分かる方、教えてください。

  • IronPython でのDLL の使用について

    Visual Basic 2010 でDLLを作成し,IronPython 2.6 で使用したいのですがエラーが出て動きません。 何かアドバイスがありましたらお願いします。 ・DLLの作成 Visual Basic の新規プロジェクトを”クラスライブラリ”として作成 (.NET Framework 2.0) Public Class aaa Public Sub bbb() MsgBox("AAA") End Sub End Class ・IronPython での呼び出し側 import os import clr import sys clr.AddReferenceByPartialName("Microsoft.VisualBasic") from Microsoft.VisualBasic import Interaction sys.path.append(os.path.dirname(os.path.abspath(__file__))) clr.AddReferenceToFile("test_VB.dll") import test_VB aa = test_VB.aaa aa.bbb() 実行すると, TypeError: bbb() takes exactly 1 argument (0 given) となってしまいます。 bbb()定義時には何も引数を指定していないのですが, 何を渡せばいいでしょうか? よろしくお願いします。

  • Visual Studio InstallerでDLL類が自動で追加さないようですが

    VisualBasic6.0で作成したプロジェクトを配布可能な状態にしたいのですが、今までディストリビューションウィザードを使用していましたが、Visual Studio Installerの使用を試みました。DLL類は自動で追加されないものなのでしょうか。 (1)(画像ファイルやデータファイルは手作業で「アプリケーションフォルダ」に追加したのですが)DLLなども手作業で追加しないとならないのでしょうか。 (2)もしも手作業で追加しないといけないならば、ディストリビューションウィザードで作成されたCABファイル内の、「DLL、OCX、EXE、TLB」全てを(SETUP1.EXEは除くでしょうか)「Windowsシステムフォルダ」に追加すればよいのでしょうか。 勝手に追加して不具合が起こるといけないと思い、質問させていただきました。恐れ入りますがご教授いたいただきたくお願いいたします。 ちなみに、Visual Studio Installerは以下のような手順で操作しました。もしも操作が間違っているせいで、DLL類が追加されないならば、ご指摘いただけるとありがたく存じます。 「新規作成」画面で「Visual Basicインストーラ」のアイコンをダブルクリック。 →Visual Basicプロジェクトを選択してくださいという表示に「参照」ボタンで「~.vbp」を選択。 →「インストーラを作成」にチェックを入れ「日本語コードページに対応」を選択。 →その後、必要な画像ファイルやデータファイルを「アプリケーションフォルダ」に追加。 →「ビルド」→「ビルド」を実行。 ちなみに、インストーラを変えたい理由は、「ダブル バイト文字を使用したユーザー名でログインしすると、エラーが発生する」のを回避するため、マイクロソフトのページに記載の対策をとっていたのですが、必ずしもうまくいかない場合があるようだったからです。 以上恐れ入りますがよろしくご教授いただきたくお願いいたします。

  • [C#] 複数のDLLを一つに統合したいです。

    現在C#でDLLを開発しています。 その中で他社から購入したDLLを使用しているのですが、 それをユーザーに見せないようにしたいと言われました。 そのため、開発中のDLLに購入したDLLをどうにかして取り込みたいと 考えているのですが(スタティックリンクのような?)可能なのでしょうか? C#はそもそもスタティックリンクできないことは調べてわかりました。 また、ILMergeというものもありますが、実行ファイルに対してDLL取り込みを 行うようでDLLに対して行えないように見受けられます。 (試しに実行してみたところファイル生成まではされましたが  起動時に落ちてしまいました…) 環境は、 visual studio 2012 .NET Framework 4.5 です。 皆様、よろしければ知恵をお貸しください。

  • RedHatLinux+PostgreSQLを使ったWebシステムのパ

    RedHatLinux+PostgreSQLを使ったWebシステムのパフォーマンスチューニングについて。 RedHatLinux+PostgreSQLを使ったWebシステムをある会社に開発してもらったのですが、 検索のパフォーマンスがとても悪く問題になっています。 まずは、システムのどの部分がボトルネックになっているかを調査したいのですが、どのような ソフト、またはコマンドを使って調査すればよいのでしょうか? それと、ボトルネックになっている部分をどのように改善するかを教えていただけますでしょうか。 また、開発してもらったソースは公開されておらず、オブジェクトでの提供になっており SQL文が分かりません。 実行されたSQL文を解析する方法はありますでしょうか? よろしくお願いいたします。

  • 読み込むDLLのディレクトリを変更したい

    Visual C++ 7.1を使用しています。 ライブラリを使って作成したアプリを配布するとき、 一緒にDLLファイルも配布しないと起動できませんよね? 通常は、DLLファイルのパスは実行ファイルと同じか、 system32などのディレクトリに入れなければ 「~~~.dllが見つかりません。」 みたいなエラーが表示されるかと思います。 (違ったらすみません) そうではなく、DLLファイルが10個以上ありますので、 実行ファイルと同じディレクトリだとややこしくなるため、 実行フォルダより1つ下の階層にまとめて置きたいのですが、 そのような事は可能なのでしょうか? できれば、LoadLibraryなどの関数は使わず、 何かしらの設定で出来るのであればそれが望ましいです。 可能でしたら、方法をご伝授いただけると助かります。 よろしくおねがいします。 サンプルですが構成としては以下のような感じです。 (※[ ]はフォルダ名を表します) [Main]  ReadMe.txt  実行ファイル.exe  [Image]   image1.png   image2.png  [Sound]   sound1.wav   sound2.wav  [DLL]   graphics2d.dll   input.dll   sound.dll   file.dll

  • *.exeと異なるフォルダのDLLをみにいく様に設定するには?

    環境 Windows VISTA SP1 Visual Studio 2008 今現在、ビルドすると、releaseというフォルダにA.exeが 作成されます。そして、同一のプロジェクトにDLL生成プロジェクトを 追加してあり、同じreleaseというフォルダに B.dllが生成される様に設定してあります。 この状態で、A.exeをたたけば、B.dllを認識して立ち上がってくれます。 しかし、最近、dllを作るプロジェクトが大量になってしまい、 releaseフォルダが結構たくさんになってしまっています そこでA.exeをたたいたら release/dll というフォルダをみにいって起動してくれる様に改良 したいのですが どうしたらよいでしょうか? *exeを追記しているslnのプロパティを一通りみたのですが よくわかりません。

  • メールを送受信できるDLL(ご指導お願いします。)

    こんにちは。どうにも困っており教えていただければと思います。 今、メールソフトをVB6.0で作っています。 nMail.DllというDLLを使ってメールの送信・受信を することまでは、できたのですが 容量の大きい添付ファイルを送信又は受信すると ソフトウェアが、処理待ちになってしまい ユーザから見ると、フリーズしたような感じに なってしまいます。 教えていただきたい点としまして ・容量の大きいデータを送信・受信でき さらにその送信・受信の最中に 割り込みイベントを発生できる方法 です。 日本システム開発のメールDLL http://www.vector.co.jp/soft/win95/prog/se279742.html では、それができそうなのですが、OCXを必要とするのが、ボトルネックとなっています。 ご存知の方法がございましたら、ご指導のほど、どうぞよろしくお願いいたします。

  • Visual Basic6.0で作ったデータをVisual C 6.0を用いて通信したい(DLLファイルを作成)

    Visual C 6.0 Visual Basic 6.0 WindowsXP 掲題の件ですが、 VBで作成したデータをVCで通信したいと思い、 値を受け渡すにはDLLファイルを作って関数の戻り値にすれば良いと調べて分かり、 作成方法を知りたく質問させていただきました。 まず、 ・どちらのプログラムでDLLファイルを作成したらいいか ・どのようにコードを記述して作成したら良いか(VB,VC) VCで一度作成しようと思い、サンプルコードを調べ、ビルドしたところ 「デバック・・・実行可能ファイル・・・」 と表示されファイルを選ばなければいけない画面になりました。 これはどれを選択すれば良いのでしょうか。 よろしくお願い致します。

  • VB.NETでDLL関数を呼び出すには

    VB.NETでDLLの関数を呼び出す時に、 NewではなくCreateObject()を使って呼び出すには、 どのように記述をすればよいのでしょうか。 具体的には、 ソリューション名 ClassLibrary1で ---------------------------------- Imports System.Windows.Forms Public Class Class1 Public Sub test() MessageBox.Show("テスト") End Sub End Class ---------------------------------- のコードをビルドしてClassLibrary1.dllを生成して、 ソリューション名 ConsoleApp1で ---------------------------------- Imports ClassLibrary1 Module Module1 Sub Main() Dim obj As Class1 obj = New Class1() 'obj = CreateObject("Class1") obj.test() End Sub End Module ---------------------------------- のコードをビルドして実行すると、 正しく実行できますが、 obj = New Class1() を obj = CreateObject("Class1") のようにすると図のようなエラーになります。 Newではなく、CreateObject()を使ってDLLを呼び出すには、 どのように記述をすればよいのでしょうか。 よろしくお願いします。 (Windows10)(Visual Studio 2022)