0

在进行远程方法调用时,我得到了 OutOfMemoryException。

“RemoteEntity.SetLocalStore(数据集);”

传递的值是数据集。

注意数据集大小为 38mb

环境 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);

        }
4

1 回答 1

1

我想你知道答案,38mb 对于远程呼叫来说太大了。将有助于进一步诊断它的方法是通过将您的问题简化为仅在本地运行的两个函数来显示一个完整的示例。

这将有助于检测它是数据集的大小还是远程接口/网络配置中的大小限制。

此外,拥有一个工作示例将允许其他人复制该问题并查看类型信息(例如,我们无法看到引发异常的对象类型,也无法在 MSDN 中查找任何约束)。我敢肯定,有了这个,有人将能够提供明确的答案。

将代码简化为示例的行为本身可能使您能够找到原因。

瑞安

于 2009-11-02T16:10:12.883 回答