問題タブ [dispose]
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.
sharepoint - SPWeb.Site、Dispose()を呼び出す必要がありますか?
2009年6月8日15:52更新:短い回答NO。元の質問:
廃棄に関するSPWeb.Siteのガイダンスを提供するリファレンスが見つかりません。SharePointオブジェクトの破棄に関するより一般的なベストプラクティスのドキュメントをいくつか確認しました。
- http://www.sharepointdevwiki.com/display/public/When+to+Dispose+SharePoint+objects
- http://msdn.microsoft.com/en-us/library/aa973248.aspx
- http://blogs.msdn.com/rogerla/archive/2008/02/12/sharepoint-2007-and-wss-3-0-dispose-patterns-by-example.aspx
残念ながら、これらのガイドラインのいずれもSPWeb.Siteについて言及していません。コンテキストを与えるために、メソッドの引数としてSPWebを受け入れるパブリック拡張APIを作成しています。
SPWebのrefelectorでClose()メソッドを調べましたが、これはSPWeb.Dispose()によって呼び出され、実際のSPSiteメンバーフィールドが破棄されることを示すものは何もありません。
更新:2009年6月8日13:47
アレックスの提案で
「100回実行されるループに入れ、WSSv3およびMOSS2007でのSPSite/ SPWebリークのトラブルシューティングで説明されているSPRequestStackTraceレジストリキーを使用して、テストコードが問題の原因であることを確認します。」
Webパーツ内に含まれている次のコードを実行しました。
SharePointログには何も表示されませんでした。
この素朴な実験から実際の結論を出すことを躊躇しますが、SPWeb.Siteを破棄する必要はないことを示唆しています。このテーマについてもっと情報を持っている人から具体的な答えを得るのは本当に素晴らしいことです。
更新:2009年6月8日14:52 グレッグのコメントによるプロンプトm_Siteの割り当てを作成しましたが、最終的には常に内部コンストラクターを介してSPWebに渡されるようです。たとえば、SPWeb.OpenWebはこれを新しいSPWeb()に渡します。したがって、SPWeb.Siteは破棄されるべきではないと確信しています。破棄された場合、実際に問題が発生する可能性があります。
c# - WPFアプリケーションでDispose()メソッドを呼び出す場合
テキストボックスとボタンを含む単純なWPFシングルウィンドウアプリケーションがあります。また、WPFウィンドウでWindowsフォームのNotifyIconとDateTimePickerを使用します。すべてのコントロールを効果的に破棄するにはどうすればよいですか?
.net - sendasync (smtpclient) を使用する場合、トークンは ref ではなく val で送信されますか?
リフレクターで調べたところ、関数のパラメーターにオブジェクト トークンを持つ sendasync(smtpclient) が byval であるようです。
コールバック関数で添付ファイルを解放しようとするのは理にかなっていますか?
どこでも人々 (私自身を含む) は sendasync(mailmessage,mailmessage) を行っているようです
そしてコールバック(SendCompletedCallback)で次のようなことをしています:
しかし、sendasync は byval であるため、元の添付ファイルを破棄するべきではありませんよね?
私の場合、添付ファイルはメモリストリームです
.net - 明示的な終了が必要ですか?
EntLib 4.1 を使用しています。
タスクを実行した後、次のように _db オブジェクトを破棄する必要がありますか?
...またはEntLibフレームワークはそれを自動的に処理しますか?
powershell - プロセスの終了前に Powershell 実行空間オブジェクトを閉じる/破棄しないと、どのような影響がありますか?
(System.Management.Automation.Runspaces からの) Runspace オブジェクトのシングルトン インスタンスをアプリケーションの有効期間にわたって維持するアプリケーションを考えると、アプリケーションが終了する前に Runspace を破棄しないと、どのような副作用が生じる可能性がありますか?
私が提示された設計上の根拠は、この場合、メモリ/ハンドル リークは問題にならないというものです。これは、プロセスの終了によってこれらのリソースがすべて強制的に解放され、シングルトンの有効期間がアプリケーションと同じであるためです。その設計で無視されている他の考慮事項はありますか?
interop - IronPython の相互運用アセンブリを介して使用している VB6 COM オブジェクトを破棄するにはどうすればよいですか?
ここで見られるように、IronPython で .NET 相互運用機能アセンブリを使用してサード パーティの COM コンポーネントを使用しています: How can I use a VB6 COM 'reference' in IronPython?
この分野での私の経験は素晴らしいものでした.シームレスに機能するものの量に非常に感銘を受けました.1つのことを除いて.
サード パーティの COM コンポーネントは、Microsoft の DAO ライブラリ (バージョンは不明) を使用して、さらに別のサード パーティ アプリケーションによって作成されたデータベースを操作します。問題は、このデータベース ファイルがプログラムの実行中に再作成されることです。この COM オブジェクトを「初期化解除」したいと考えています。特に、自分のコード (COM コンポーネントの属性にアクセスしたり、そのメソッドを呼び出したりするコード) を実行すると、最初にルーチンを実行したときに問題なく動作します。ただし、次回、サード パーティの COM コンポーネントは、データベース (MSAccess 95 .mdb ファイル) が既に使用されていることを示すメッセージ ボックスを表示し、再試行するオプションを提供します。再試行を押すと確実に機能するため、主な問題はこのダイアログが表示されることです。
したがって、私の理論では、COM コンポーネントがデータベースへのハンドルをリークしており、呼び出す「クリーンアップ」メソッドが見つかりません。試してみましたが、うまくいきませ.Dispose()
んでした。
私の最後の手段は、COM オブジェクトを呼び出すコードを、std in/out を介してメイン プロセスと対話する別の IronPython プロセスにすることです。これは、COM オブジェクトが提供する役割が「このすべての情報を今すぐ提供する」ユース ケースに近いためです。継続的に必要な依存関係の代わりに。
私はそのシナリオを避けたいと思っています.COM(または実際には.NET)に慣れていないので、明らかな.Dispose
方法などが欠けていることを願っています。
FreeLibrary
クリーンな方法がない場合、ネイティブ コードで繰り返し呼び出しを行うのと同じように、プロセスからアセンブリを強制的にアンロードできますか? (コードがオブジェクトをもう使用しないことを保証するので、メモリ保護エラーにつながる参照の欠落を心配する必要はありません)
編集:
これを解決できなかったので、プロセス外の方法を使用し、子のバッチ プロセスがシャットダウンしたときにウィンドウをクリーンアップさせました。
sharepoint - SharePoint のクロス メソッド破棄パターン
SharePoint サイトのコンテンツにさまざまな変更を加えるクラスを作成しました。そのクラス内で、遅延解決されたプロパティを実装しました
SPSite と SPWeb の両方を破棄する必要があり、ベスト プラクティスドキュメントによると、この状況は Cross Method Dispose Pattern と呼ばれています。
クラスに IDisposable を実装し (そこにサイトと Web を配置)、呼び出し元がusing句を介してアクセスするようにしました。それは「ベストプラクティス」に従っているのでしょうか、それとも問題を別の方法で処理する必要がありましたか?
私は厳密な参照カウントのバックグラウンドを持っていることに注意してください。ガベージ処理に関する私の見解が少しずれている場合は、修正してください。
.net - 独自のBeginInvoke()を呼び出してコントロールを破棄する
独自のBeginInvoke()を呼び出すことによってコントロールを破棄することは、良いアイデアですか、それとも悪いアイデアですか?または、このタスクを実行するために親コントロールなどを使用しますか?
別のスレッドからコントロールにアクセスしているため、Invokeを使用しています。
.net - VB/C#: 使い捨てオブジェクトをグローバル スコープに配置する: これでよろしいですか?
最適化として、頻繁に必要とするオブジェクト (レベル全体のレンダリング済みイメージ (S_AreaBMP と呼ばれる) を持つ SDL サーフェス) をグローバル スコープに配置することにしました。
これで、フレームごとに DrawScreen 関数で作成および破棄する必要がなくなりました。新しいレベルまたは GFX シートがロードされたときにのみ破棄して変更する必要があります。これは、次の関数を使用して行います。
(AreaBMPExists と S_AreaBMP はグローバル スコープです)
質問:これは根本的に健全ですか?
それはうまく機能しますが、私はこの種のことが落胆しているように感じずにはいられません...