RX フレームワークでクラスを使用する場合、クラス内のリソースを解放するにはどうすればよいですか? Web サービス プロキシ、ado.net オブジェクトなどを含む C# 4.0 lib プロジェクトのクラスがあり、IDisposable も実装しました。このクラスには実行中のメソッドがあり、このメソッド内でデータをデータセットに保存しています。最終的にメソッドが終了したら、データセットを DB に保存します。
Dispose メソッドで、データセットを null に設定し、他の Web サービス プロキシ オブジェクトを null に設定しています。ただし、このクラスがリアクティブ拡張メソッドで頻繁に使用されると、メモリ例外がスローされます。
public class MyClass : IDisposable
{
proxy object;
DataSet object; // This dataset has 2 tables with relation set each other
public string LongRunMethods(string code)
{
// iterrating a for loop...
// insert new row into the 1st table of dataset in each loop
// another loop
// insert new row into the 2nd table of dataset in each loop
// Bulk save the dataset to Database
// return string;
}
private void Dispose()
{
// nulling all the objects...[proxies, datasets, etc
}
}
そして、このクラスは以下のように1000回作成して使用しています。
IObservable<string> RunProcess(Employee emp)
{
using (MyClass p = new MyClass ())
{
return Observable.Start(() => p.LongRunMethods(emp.Code), scheduler.ThreadPool);
}
}
この EmployeeDatas は、1000 個の従業員オブジェクトのリストです。
EmployeeDatas.ToObservable().Select(x => RunProcess(x).Select(y => new { edata = x, retval = y }))
.Merge(10)
.ObserveOn(Scheduler.CurrentThread)
.Subscribe(x =>
{
SendReportStatus(x.retval.Item1, x.retval);
});
すべてが正常に機能しています。しかし、300 番目以降の従業員オブジェクトを処理すると、MyClass でメモリ不足の例外がスローされることがあります。
MyClass で dispose メソッドを使用しています。これは、終了したらすべてのリソースを解放します。それでも、なぜメモリ不足の例外が発生するのですか。
ここで何が問題なのですか。