我在进行远程方法调用时得到OutOfMemoryException。
“RemoteEntity.SetLocalStore(数据集);”
传递的值是数据集。
注意数据集的大小为38mb
Envoirment c#VS2008
由于
代码:
private void backgroundSync_DoWork(object sender, DoWorkEventArgs e)
{
backgroundSync.ReportProgress(10, "Fetching data for sync ...");
EngagementSet _remoteSet = HKMPClient.Instance.RemoteEntity.GetLocalStore();
//Update to release memory.
HKMPClient.Instance.RemoteEntity.SetLocalStore(null);
//dispose RemoteEntity
HKMPClient.Instance.DisconnectAndDispose();
HKMP.EngagementWorks.Windows.BLL.Engagements.Engagement.MergeEntitiesInLimitedConnecitivity(_remoteSet,EngagementID);
backgroundSync.ReportProgress(10, "Synchronizing Engagement ...");
DialogSync _dlgSync = new DialogSync(this.EngagementID, _remoteSet);
_dlgSync.ServiceRequestStarted += new DialogSync.OnServiceRequestStarted(_dlgSync_ServiceRequestStarted);
_dlgSync.ServiceRequestCompleted += new DialogSync.OnServiceRequestCompleted(_dlgSync_ServiceRequestCompleted);
if (_dlgSync.IsShown())
{
_dlgSync.StartPosition = FormStartPosition.CenterParent;
_dlgSync.WindowState = FormWindowState.Normal;
_dlgSync.ShowDialog();
}
//Disposed to release object.
_dlgSync.Dispose();
_dlgSync = null;
// connect again
HKMPClient.Instance.Connect(e.Argument.ToString());
_remoteSet.RemotingFormat = SerializationFormat.Binary;
HKMPClient.Instance.RemoteEntity.SetLocalStore(_remoteSet);
}
答案 0 :(得分:1)
我想你知道答案,38mb对于远程通话来说太大了。有助于进一步诊断的是通过将问题简化为仅在本地运行的两个函数来显示一个完整的示例。
这将有助于检测数据集的大小或远程接口/网络配置中的大小约束。
另外,拥有一个工作样本将允许其他人复制该问题并查看类型信息(例如,我们无法看到引发异常的对象类型,并且无法在MSDN中查找任何约束)。我相信有人能够提供明确的答案。
将代码缩减为样本的行为本身可能使您能够找到原因。
赖安