OutOfMemoryException durante a chamada de método remoto
-
12-09-2019 - |
Pergunta
Iam ficando OutOfMemoryException ao fazer chamada de método remoto.
"RemoteEntity.SetLocalStore (DATASET);"
valor passado é conjunto de dados.
Nota Tamanho do conjunto de dados é 38MB
envoirment c # VS2008
Graças
Código:
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);
}
Solução
Eu acho que você sabe a resposta, 38MB é muito grande para fazer mais de uma chamada remota. O que vai ajudar a diagnosticar-lo ainda mais seria mostrar um exemplo completo por simplfying seu problema para apenas duas funções rodando localmente.
Isso ajudará a detectar se ele é o tamanho do conjunto de dados ou uma restrição tamanho na configuração remota de interface / rede.
Além disso ter uma amostra de trabalho iria permitir que alguém para replicar o problema e veja as informações de tipo (por exemplo, não podemos ver o que tipo de objeto é lançar a exceção e não pode olhar para cima quaisquer restrições no MSDN). Tenho certeza que com este alguém seria capaz de dar uma resposta definitiva.
O ato de reduzir o seu código a uma vontade amostra em si, provavelmente permitem que você encontrar a causa.
Ryan