我有一个很大的疑问。问题是我班上的内存不足异常。但这里似乎有些奇怪。我在 dll 中有课程。
public class MyClass : IDisposible
{
List<ClassA> a_classLists = new .....// new instance.
List<ClassB> b_classLists = new .....// new instance.
public string Method1(int IDValue)
{
// do here some web service call and get some XML data from it.
// parse the xml.
// Iterate through a for loop and add each node value to a_classLists
// Usually contains 10 or 15 items
Method2(); // from here calling another method
FinalSaveToDB(); // finally save the data to DB
return "";
}
private void Method2()
{
// do here some web service call and get some XML data from it.
// Iterate through a forloop.
// parse the xml. [large xml data. ie, image in binary format]
// For each loop add image binary data and other xml to b_classLists
// Usually it contains 50 or 60 such large lists.
}
private void FinalSaveToDB()
{
// using sqlbulkcopy, i am saving the data in the 2 lists to 2 different
// tables in the DB.
// Tab lock is mentioned in sqlbulk class.
// Actually 2 sqlbulkcopy class for 2 lists.
// Only 1 sql connection opens, then do the sqlbulkcopy. [there is no dataset or datareader]
// sqlconnection closes. I am using "using" clause for sqlconnection, bulkcopy etc
// these all are working fine.
}
private void Dispose()
{
// here nulling everything
// proxy null
// all the lists null....
}
}
这是我使用响应式框架的 Observable.Start 方法实例化 1000 次的类,如下所示...
private IObservable<string> SendEmpDetails(Employee emp)
{
using (MyClass p = new MyClass())
{
return Observable.Start(() => p.Method1(emp.ID), Scheduler.ThreadPool);
}
// here I hope it will call the Dispose and release all objects in the class.
}
// This EmployeeLists contains 1000 employee objects
EmployeeLists.ToObservable().Select(x => SendEmpDetails(x).Select(y => new { emp = x, retval = y }))
.Merge(10)
.ObserveOn(Scheduler.CurrentThread)
.Subscribe(x =>
{
SendStatus(x.retval.Item1, x.retval);
});
即使,为什么我会出现内存不足异常???启动应用程序后,当它处理第 200 个(或以上)MyClass 对象时,它会抛出错误。
我忘了再提一件事,我使用的是 VS 2010 和 C# 4.0(win7,64 位操作系统)。
我需要记录每个活动。[即,我需要了解应用程序经历的每一个过程]。所以我声明了一个类 [MyClass] 级别的私有字符串变量并分配每个进程的详细信息,如“调用此方法”、“从该 Web 服务获取 5 条记录”等。
logdata = Environment.Newline() + "This method has completed";
所以这里抛出错误,说内存不足,一些评估失败。
所以我从 VS 中的 Options 中关闭了字符串评估复选框。
再次,没有用。
所以我将字符串更改为 StringBuilder 并尝试每次都附加活动字符串。
还是没用。我不明白它有什么问题。
这是因为所有线程都在并行工作,它们交换 MyClass 资源吗???为什么不释放对象???
请在这件事上帮助我。