0

私はこの人に似た問題を抱えています。アプリケーションであるという主な違いは、開発者環境向けではないため、Sql Server が使用するスペースを最適化する方法を知る必要があります (おそらく仕様に基づいてマシンごとに)。

リカルド C の回答、特に次の点に興味をそそられました。

SQL Server ドキュメントからの抜粋:

最大サーバー メモリ (MB)

SQL Server が起動時および実行中に割り当てることができるメモリの最大量を指定します。SQL Server と同時に複数のアプリケーションが実行されていることがわかっていて、これらのアプリケーションを実行するのに十分なメモリがあることを保証したい場合は、この構成オプションを特定の値に設定できます。Web サーバーや電子メール サーバーなどの他のアプリケーションが必要な場合にのみメモリを要求する場合は、オプションを設定しないでください。SQL Server は必要に応じてそれらのアプリケーションにメモリを解放します。ただし、多くの場合、アプリケーションは起動時に利用可能なメモリをすべて使用し、必要に応じてそれ以上のメモリを要求しません。. このように動作するアプリケーションが SQL Server と同時に同じコンピューター上で実行される場合は、アプリケーションが必要とするメモリが SQL Server によって割り当てられないことを保証する値にオプションを設定します。

私の質問は、アプリケーションが必要なときに OS からメモリを要求する方法です。これはコンパイルに組み込まれたものですか、それとも開発者によって管理されるものですか? このマシンで実行されている 2 つの主要なアプリは、Sql Server と、私が開発している (かなり重い) C# アプリケーションです。OS にメモリを要求する領域では特に何もしていないことはほぼ確実です。これを行う正しい/必要な方法はありますか?

4

3 に答える 3

1

一部のアプリケーションは、起動時に大量のメモリを割り当て、その上で独自のメモリ管理システムを実行します。これは、特定の割り当てパターンを持ち、ランタイム システムによって提供されるより一般的なメモリ マネージャーよりも優れた処理を実行できると感じているアプリケーションに適しています。

多くのゲームは、メモリ使用パターンがどのように見えるかについて非常に良いアイデアを持っていることが多く、多くの場合、大幅に最適化されているため、これを行います。デフォルト/システム アロケータは汎用であり、必ずしも十分に高速であるとは限りません。Doom はこれを行い、そのことでかなり有名であり、もちろんそのコードは利用可能であり、広く議論されています。

C# のような「管理された」言語では、これは非常にまれであり、心配する必要はないと思います。

于 2008-11-17T08:49:53.013 に答える
0

それはいくつかの事柄に依存します-特にオペレーティングシステムと使用される言語。

たとえば、MacOS Classicでは、起動後にメモリを割り当てることはできませんでした。以前は、Finderを使用して割り当てられたメモリの量を変更してから、アプリケーションを再起動する必要がありました。それらは古き良き時代でした。

最新のオペレーティングシステムでは、実行中のプロセスがより多くのメモリを要求できるようになります。たとえば、Cでは、alloc()、malloc()、realloc()などを使用してメモリのチャンクを要求できます。動的言語では、オブジェクトまたは変数を作成するだけで、より多くのメモリが割り当てられます。

Javaでは、JVMがアクセスできるメモリの量に制限があります。これは、JVMを再起動し、いくつかの引数を渡すだけで変更できます(古き良き時代のようですね)。

Objective-Cでは、malloc()ファミリーの関数に加えて、を使用してヒープ上にオブジェクトを作成することもできます。

[object alloc]; 

これはより頻繁に見られます

[[object alloc] init];

これは、スタック上にオブジェクトを作成することとは少し異なることに注意してください。プログラミングに真剣に取り組んでいる場合は、これら2つの違いを学ぶことも役立つかもしれません:)

要約すると、プログラマーはOSにメモリの追加を要求する必要があります。これは、暗黙的(動的言語では、オブジェクトを作成するか、ヒープ上にオブジェクトを作成することによって)にすることも、Cのようにalloc()/ malloc()/etcを使用して明示的にすることもできます。

于 2008-11-17T11:32:51.017 に答える
0

新しいオブジェクトを作成するたびに、.NET ガベージ コレクターにメモリの提供を求めています。GC がマネージド ヒープに十分なメモリを持っていない場合、OS に追加を要求します。他の質問が言うように、SQL サーバーはメモリを元に戻すことを意図していますが、あまりうまく機能していないようです。ここでは厳格な規則はありません。SQL サーバーの設定を推測してから、パフォーマンスをテストする必要があります。サーバー、データベースのサイズ、アプリケーションに必要と思われるメモリの量に関する情報を投稿すると、開始構成に関するいくつかの提案を喜んで提供してくれると確信しています。ただし、メモリ制限を変更するには、サービスを再起動する必要があると思います。

于 2008-11-17T08:49:15.353 に答える