タグ付けされた質問 「performance」

アプリケーションのパフォーマンスの向上に関する質問です。これは、ソフトウェアアーキテクチャの選択からアルゴリズムの選択までさまざまです。

3
std :: stringのc_str()にはどのようなパフォーマンスが期待できますか?常に一定の時間ですか?
私は最近、いくつかの必要な最適化を行ってきました。私がやっていることの1つは、ostringstreams-> sprintfsを変更することです。私はたくさんのstd :: stringsをacスタイルの配列、alaにスプリントしています char foo[500]; sprintf(foo, "%s+%s", str1.c_str(), str2.c_str()); Microsoftのstd :: string :: c_str()実装は一定の時間で実行されることがわかりました(内部ポインターを返すだけです)。と思われるのlibstdc ++が同じことを行います。stdはc_strを保証しませんが、これを行う別の方法を想像するのは難しいと思います。たとえば、メモリにコピーした場合、バッファにメモリを割り当てる必要があります(呼び出し元に任せて破棄します-STLコントラクトの一部ではありません)または、内部staticにコピーする必要がありますバッファ(おそらくスレッドセーフではないため、その寿命については保証されません)。したがって、内部的に維持されているヌル終了文字列へのポインタを単に返すことが唯一の現実的な解決策のようです。

5
関数呼び出しはパフォーマンスにどの程度影響しますか?
メソッドや関数に機能を抽出することは、特にOOPにおいて、コードのモジュール性、可読性、相互運用性にとって不可欠です。 しかし、これはより多くの関数呼び出しが行われることを意味します。 コードをメソッドまたは関数に分割すると、現代の*言語のパフォーマンスに実際にどのような影響がありますか? *最も人気のあるもの:C、Java、C ++、C#、Python、JavaScript、Ruby ...

3
呼び出しが高価な場合にPythonで単一責任原則(SRP)を使用する
いくつかのベースポイント: Pythonのメソッド呼び出しは、その解釈された性質により「高価」です。理論的には、コードが十分に単純な場合、Pythonコードの分解は、読みやすさと再利用に加えてマイナスの影響を及ぼします(これは、ユーザーにとってはそれほどではなく、開発者にとって大きな利益です)。 単一責任原則(SRP)は、コードを読み取り可能に保ち、テストと保守が容易です。 プロジェクトには、読み取り可能なコード、テスト、および時間パフォーマンスが必要な特別な種類の背景があります。 たとえば、いくつかのメソッド(x4)を呼び出すこのようなコードは、次のメソッド(1つ)よりも低速です。 from operator import add class Vector: def __init__(self,list_of_3): self.coordinates = list_of_3 def move(self,movement): self.coordinates = list( map(add, self.coordinates, movement)) return self.coordinates def revert(self): self.coordinates = self.coordinates[::-1] return self.coordinates def get_coordinates(self): return self.coordinates ## Operation with one vector vec3 = Vector([1,2,3]) vec3.move([1,1,1]) vec3.revert() vec3.get_coordinates() これと比較して: from …

5
計算に使用するコアの数 #coresまたは#cores -1?
私はやるべき大きな計算があります。すべてのコアを使用できますが、1つのコアを使用せずに使用しない理由はありますか?(計算CPUはIOなしのみ)。または、すべてのコアを利用しても、適切なコンテキストスイッチングを処理および実行することを知らないOSを過小評価していますか?

5
円に最も近い最適なものを見つける
以下は、真ん中に白い点のポイントがあり、すべての赤い円がすでに存在する場合に青い円(明らかにそれを配置した場所にある)に最も近い場所を見つけたい場合の画像例です。 。その場所を見つけるにはどうすればよいですか? 私にとってパフォーマンスは、このアプリケーションにとって大きな関心事ではありません。

1
ファイルまたはデータベーステーブルにログを記録しますか?
ユーザー、ユーザーアカウント、ユーザーライセンス、ライセンス価格、請求書など、さまざまなデータにMS SQLを使用するWebアプリケーションを開発しています。 ユーザーのシステムのリアルタイム使用状況をログに記録し、毎月の請求に使用する必要があります。たとえば、ユーザーが特定のページ/ URLを取得するたびにログを記録し、取得したページ数に基づいて月末にユーザーに請求します。 これらのログイベントをMS SQLデータベースのテーブルに書き込む必要がありますか? これらのログイベントをSQL以外の追加専用ログファイルに書き込む必要がありますか? これらのログイベントをユーザーごとに異なるログファイルに書き込む必要がありますか? これは特に大規模なWebサイトではありません。たとえば、最大10,000ユーザーが1日あたり平均5つのログ記録可能なイベントを行う=> 50,000イベント/日= 30イベント/分= 18,000,000イベント/年。 どちらかのオプションが実行可能と思われ、明確な利点があるかどうかわからないので、私は尋ねています。 請求可能なイベントに関連付けられたデータは単純です。たとえば、次のとおりです。 ユーザーID(SQLのユーザーテーブルとの外部キー関係) 日時 請求可能なページのURL この質問に対する私自身の答えは次のとおりです。 データベーステーブルにログを書き込むことの利点: 関係の整合性:たとえば、ログに記録されたイベントは有効なユーザーIDに関連付けられます(ユーザーIDをテーブル間の外部キーとして定義することにより) 課金のために読みやすい:例えばSELECT COUNT GROUP BY、ユーザーごとのログイベントの数のカウントを取得する ログファイルへの書き込みのいくつかの利点: より簡単なパフォーマンス:SQLはあまり頻繁に使用されません。たとえば、ユーザーのログインイベントにのみ使用され、ほとんどが読み取りにのみ使用されます 管理の簡素化:データベースから削除/アーカイブする代わりに古いログファイルを移動することにより、年末などに古いデータを簡単にアーカイブできます 答えが間違っている場合はお知らせください。または何かの重要性を誇張します。またはいくつかの重要な考慮事項を忘れています。 そして/またはそれが私の答えと異なる場合、あなたの答えが何であるかを教えてください。

2
「可能性が高い」および「可能性が低い」マクロの使用量は多すぎますか?
よく知られlikelyているunlikelyマクロとマクロは、コンパイラifが通常入力されるかスキップされるかを知るのに役立ちます。これを使用すると、パフォーマンスが多少(わずかに)向上します。 私は最近それらを使い始めましたが、そのようなヒントをどのくらいの頻度で使用すべきかわかりません。現在、エラーチェックで使用します。if通常はとしてマークされunlikelyます。例えば: mem = malloc(size); if (unlikely(mem == NULL)) goto exit_no_mem; それは問題ないように見えますが、エラーチェックはif非常に頻繁に発生し、その結果、上記のマクロが使用されます。 私の質問は、すべてのエラーチェックでマクロlikelyとunlikelyマクロを持っているのは多すぎるのifですか? 我々がそれに取り組んでいる間、彼らは他のどのような場所でよく使われますか? 私の現在の使用法では、リアルタイムサブシステムから抽象化するライブラリにあるため、プログラムはRTAI、QNXなどの間で移植可能になります。ただし、ほとんどの関数はかなり小さく、1つまたは2つの他の関数を直接呼び出します。多くはstatic inline機能です。 だから、まず第一に、それは私がプロファイルできるアプリケーションではありません。スタンドアロンアプリケーションではなくライブラリであるため、「ボトルネックを特定する」ことは意味がありません。 第二に、「これはありそうもないことを知っているので、コンパイラに伝えることもできます」というようなものです。私は積極的に最適化しようとしませんif。

4
C#のハッシュテーブルと辞書の実用的なサイズ制限
C#4ディクショナリまたはHashtableに含めることができるアイテムの数と、これらの構造に合理的に含めることができる合計バイト数の実際的な制限は何ですか。多数のオブジェクトを使用して、これらの構造がいつ問題を起こし始めるかを知りたいと思います。 コンテキストでは、大量のメモリを備えた64ビットシステムを使用します。また、何らかのフォームまたは「キー」を使用してオブジェクトを見つける必要があります。パフォーマンスの要求を考えると、これらのオブジェクトはメモリに常駐する必要があり、多くは存続します。 サードパーティまたはオープンソースのライブラリを使用しないようにする必要がありますが、他のアプローチ/パターンを自由に提案してください。仕様上の理由から、ネイティブC#(またはC ++ \ CLI)を使用してこれをビルドできる必要があります。

7
パフォーマンスの問題と見なされるまでに画面が表示されるまでにどれくらい時間がかかりますか?
さまざまな画面を持つWindowsアプリケーションの開発に携わっています。そのうちの1つは、画面がロードされていることを示すスピナーやその他の表示なしで表示されるのに10秒かかります。私はこれを深刻なパフォーマンスの問題だと考えていますが、心配しているのは私だけだと思われます。 私は熱心ですか?画面が表示されるのを待つ許容時間はどれくらいですか?

5
複雑なソフトウェアはどの程度の冗長性/堅牢性を実装する必要がありますか?
この質問の焦点:一部のソフトウェアは「余分な作業」を実行して、ソフトウェア内の1つまたは複数の内部エラーにもかかわらず「最終的に成功/満足」の結果を得る機会を増やします。結果が成功した場合、これらはすべてユーザーの知らないうちに発生します。 複雑なソフトウェアの定義: 存続期間中に10人以上の開発者によって作成(提供)されたコードが含まれており、同じ時間枠で記述されていない それぞれに注意事項がある10以上の外部ライブラリに依存 典型的なソフトウェアタスク(ユーザーが望む結果を生成するため)には10個以上の入力パラメーターが必要です。それらのほとんどはデフォルト値を持ちますが、ユーザーが制御を必要とする場合は構成可能です。 最も重要なことは、実行されるタスクに関連して適切な複雑さを持つソフトウェア、つまり不必要に複雑にならないソフトウェアです。 編集:複雑なものは何ですか?ComplexとComplicatedには大きな違いがあります。をご覧ください。(直接リンク) この質問内の冗長性/堅牢性の定義:(コメントに基づいて堅牢性を追加) 現在のパラメーターセットを使用したときにソフトウェアタスクが失敗した場合は、別のパラメーターを試してください。 明らかに、これらの「異なる」パラメータは異なるコードパスを使用し、結果として異なる(できればより良い)結果をもたらす可能性があるという内部知識が必要です。 これらの異なるコードパスは、外部ライブラリの観察に基づいて選択される場合があります。 最後に、実行される実際のタスクがユーザーの仕様とわずかに異なる場合、ユーザーは不一致の詳細を示すレポートを受け取ります。 最後に、10以上の構成可能なパラメーターと同様に、冗長性とレポートも構成可能です。 そのようなソフトウェアの例: データベース移行 ビジネスデータベース ソース管理データベースなど Word文書とOpenOffice文書、PowerPointおよびOpenOffice Drawなどの間のバッチ変換 ウェブサイト全体の自動翻訳 Doxygenなどのソフトウェアパッケージの自動分析。ただし、分析をより信頼性の高いものにする必要がある場合(つまり、単なるドキュメンテーションツールではない) パケットが失われる可能性があり、多くの再試行が予想されるネットワーク通信 この質問はもともと、意図的に悪いコードにどのように対処しますか?しかし、現在はソフトウェアの肥大化の原因の1つに焦点を当てています。この質問は、新機能の追加など、ソフトウェアの膨張のその他の原因には対応していません。 おそらく関連する: (巨大な)プロジェクトで複雑なコードを処理する方法 人々はどのようにして非常に複雑で読みにくいコードを書いて維持するのですか?

3
直感的でないC#String.Split()実装の背後にある理由
C#ではstring、別のものstringを分割したい場合は、そのようなことをしなければなりません: testString.Split(new string[] { "anotherString" }, StringSplitOptions.None); オーバーロードされたString.SplitMSDNドキュメントから、実装とそのような呼び出しを行う必要がある理由を確認できます。 Pythonから来たので、なぜこのような呼び出しが必要なのかを正しく理解するのは難しいです。Regex.SplitPythonの実装と同様の構文を取得するために使用できましたが、単純なものではパフォーマンス(セットアップ時間)が低下するという犠牲を払う必要があります。 だから基本的に、私の質問は、なぜ地獄ができないのかということです: testString.Split("anotherString"); プロトタイプも実装も提案していないことに注意してください。現在のAPIを考慮して上記のバージョンを実装できない理由を理解しています。私の目標は、上記の構文がもたらす利点を考慮して、そのようなAPIが作成された理由を理解することでした。今のところ、柔軟性はString.Split理にかなった現在の目標のようですが、正直なところ、どこかで何らかのパフォーマンスの向上があると本当に思っていました。私は間違っていたと思います。

3
例外や冗長性なしに入力検証を実行する方法
特定のプログラム用のインターフェイスを作成しようとすると、通常、検証されていない入力に依存する例外をスローしないようにします。 よくあることは、次のようなコードを考えたことです(これは単なる例であり、実行する機能は気にしないでください(Javaの例))。 public static String padToEvenOriginal(int evenSize, String string) { if (evenSize % 2 == 1) { throw new IllegalArgumentException("evenSize argument is not even"); } if (string.length() >= evenSize) { return string; } StringBuilder sb = new StringBuilder(evenSize); sb.append(string); for (int i = string.length(); i < evenSize; i++) { sb.append(' …

3
Foreachループと変数の初期化
これらの2つのバージョンのコードに違いはありますか? foreach (var thing in things) { int i = thing.number; // code using 'i' // pay no attention to the uselessness of 'i' } int i; foreach (var thing in things) { i = thing.number; // code using 'i' } または、コンパイラは気にしませんか?違いについて言えば、パフォーマンスとメモリ使用量という意味です。..基本的には単に違いがありますか、コンパイル後に2つが同じコードになりますか?
11 c#  performance  memory 

1
コードのどの部分が最も頻繁に実行されるかを確認するにはどうすればよいですか?
何千行ものソースコードの中で最も頻繁に実行され、最も時間がかかるコードを確認したいと思います。これの目的は最適化のためです。 最適化には、コードのどの部分が最も頻繁に実行されるかを確認できることが重要です。これらの部分は、高速化のために焦点を合わせる必要があるためです。同時に、一部のコードは非常に頻繁に実行されますが、実質的に時間はかかりません。そのため、どのコードに最も時間がかかるかを確認することも重要です。 両方の長所は、実行されたすべての時間を含めて、コードにかかる時間を合計するプログラムになると思います(そのため、コード全体が最も遅くなる原因を見つけます)。これには一種のツールがありますか?

3
低遅延Unix / Linux
ほとんどの低レイテンシ/高頻度のプログラミングジョブ(ジョブの仕様に基づく)は、UNIXプラットフォームに実装されているようです。多くの仕様で、彼らは「低遅延linux」タイプの経験を持つ人々に特別な要求をしています。 これがリアルタイムのLinux OSを意味しないと仮定すると、人々はこれが何を指しているのか私に助けを与えることができますか?CPUアフィニティをスレッドに設定できることは知っていますが、それ以上のことを要求していると思います。 カーネルのチューニング?(とにかく、ソーラーフレアのようなメーカーはカーネルバイパスネットワークカードを製造していると聞きましたが)? DMAまたはプロセス間の共有メモリはどうですか?人々が私に簡単なアイデアを与えてくれれば、Googleで調査をすることができます。 (この質問には、おそらく高頻度取引に精通した人が必要です)
11 c++  c  performance  linux  latency 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.