静的/共有クラスの管理対象オブジェクトを解放するためのベストプラクティスは何ですか?静的クラスの管理対象オブジェクトの解放
私は3つの大きなデータシートを保持しており、ほとんどの場合、それらを使用していません。
GCは静的であるため、GCを解放しません - そうですか?
ReleaseDatatables()
でヌルに設定すると便利なのか、それとも私は時間を無駄にしているのでしょうか?
ありがとうございます。
public static class Helpers
{
private static DataTable _branchDT;
public static DataTable branchDT
{
get
{
if (_branchDT == null)
{
_branchDT = new DataTable();
_branchDT = Orange.ProjectManagment.DAL.Database.getDataset("SELECT * FROM Branches").Tables[0];
return _branchDT;
}
else
{
return _branchDT;
}
}
set { _branchDT = value; }
}
private static DataTable _departmentDT;
public static DataTable departmentDT
{
get
{
if (_departmentDT == null)
{
_departmentDT = new DataTable();
_departmentDT = Orange.ProjectManagment.DAL.Database.getDataset("SELECT * FROM Departments").Tables[0];
return _departmentDT;
}
else
{
return _departmentDT;
}
}
set { _departmentDT = value; }
}
private static DataTable _TeamsDT;
public static DataTable TeamsDT
{
get
{
if (_TeamsDT == null)
{
_TeamsDT = new DataTable();
_TeamsDT = Orange.ProjectManagment.DAL.Database.getDataset("SELECT * FROM Teams").Tables[0];
return _TeamsDT;
}
else
{
return _TeamsDT;
}
}
set { _TeamsDT = value; }
}
/// <summary>
/// setting all datatables to null in order to free memory or to make them refresh them self in the next call to get property method
///
/// </summary>
public static void ReleaseDatatables()
{
// datatables set to null, hence next call to them they will refresh via new query to db in get prop method
branchDT = null;
departmentDT = null;
TeamsDT = null;
}
_「大型の3つのデータシートを保持していますが、大部分は使用しないでください」なぜそれらを保存するのですか?_データベースに_必要なときに古いデータを保存しないでください。 –
私はそれをオプションと見なしましたが、それらをnullに設定することが有用かどうか疑問に思っています – jonathana
キャッシュデータは、作成するのに費用がかかり、安くても賢明です。 DataTableは、作成するのに費用がかかり、通常は費用がかかりすぎるという区別があります。行数に応じて決して少なくない数値。しかし、チーム、支店、部署などのデータ項目には妥当な上限があります。唯一の他の懸念事項は、dbaseテーブルが変更されたときにデータが簡単に失効することです。決定を行うことはプログラマーの仕事ですが、私たちはあなたのためにそれを行うことはできません。 –