- Posts: 3
- Thank you received: 0
Online Forums
Technical support is provided through Support Forums below. Anybody can view them; you need to Register/Login to our site (see links in upper right corner) in order to Post questions. You do not have to be a licensed user of our product.
Please read Rules for forum posts before reporting your issue or asking a question. OPC Labs team is actively monitoring the forums, and replies as soon as possible. Various technical information can also be found in our Knowledge Base. For your convenience, we have also assembled a Frequently Asked Questions page.
Do not use the Contact page for technical issues.
- Forum
- Discussions
- QuickOPC-Classic in .NET
- General Issues, Building
- memory and handles leak in 64 bit version ?
memory and handles leak in 64 bit version ?
Thank you.
Please Log in or Create an account to join the conversation.
how long have you observed the values before concluding that there is a leak, and how fast the leak was? Can you provide PerfMon picture or data?
In general, since .NET manages the memory in a non-deterministic manner, very long observation periods are often necessary before a conclusion can be made. See www.opclabs.com/forum/ua-general/2278-internal-long-running-test-results#5579 .
Best regards
Please Log in or Create an account to join the conversation.
I'm currently working in C# with version 2017.1 of QuickOPC and i have observed strange behaviors.
When compiling my program in 32 bit, i have no memory leak and no handle leak everything seems to work find.
When compiling my program in 64 bit, i'm observing that my memory consumption is growing and my handles are growing too.
My program is only doing some tags subscriptions and some direct readings.
here is the class code i'm using :
class DataManager:IDisposable
{
public delegate void NMessage(string Msg);
public event NMessage NouveauMessage;
public delegate void NValeur(string Msg);
public event NValeur NouvelleValeur;
private string sMessage = "";
private EasyDAClient opcClient = null;
private int[] handles = null;
private List<DAItemGroupArguments> ArgumentsList = new List<DAItemGroupArguments>();
public void Init()
{
sMessage = "Chargement des variables depuis le fichier XML ...";
if (NouveauMessage != null)
{
NouveauMessage(sMessage);
}
ArgumentsList.Add(new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Random", 300, 1));
ArgumentsList.Add(new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Ramp (10 min)", 1000, 2));
ArgumentsList.Add(new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Ramp (1 min)", 500, 3));
ArgumentsList.Add(new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Ramp (10 s)", 500, 4));
ArgumentsList.Add(new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Ramp (1 s)", 300, 5));
ArgumentsList.Add(new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Ramp 0:100 (10 min)", 1000, 6));
ArgumentsList.Add(new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Ramp 0:100 (1 min)", 500, 7));
ArgumentsList.Add(new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Ramp 0:100 (10 s)", 500, 8));
ArgumentsList.Add(new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Ramp 0:100 (1 s)", 300, 9));
ArgumentsList.Add(new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Ramp 0:360 (10 min)", 1000, 10));
ArgumentsList.Add(new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Ramp 0:360(1 min)", 300, 11));
ArgumentsList.Add(new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Ramp 0:360 (10 s)", 1000, 12));
ArgumentsList.Add(new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Ramp 0:360 (1 s)", 500, 13));
ArgumentsList.Add(new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.OnOff (10 min)", 500, 14));
ArgumentsList.Add(new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.OnOff (1 min)", 300, 15));
ArgumentsList.Add(new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.OnOff (10 s)", 1000, 16));
ArgumentsList.Add(new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.OnOff (1 s)", 500, 17));
ArgumentsList.Add(new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Incrementing (10 min)", 500, 18));
ArgumentsList.Add(new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Incrementing (1 min)", 300, 19));
ArgumentsList.Add(new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Incrementing (10 s)", 1000, 20));
ArgumentsList.Add(new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Incrementing (1 s)", 300, 21));
ArgumentsList.Add(new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Demo.Ramp", 1000, 22));
sMessage = "Chargement des variables terminé.";
if (NouveauMessage != null)
{
NouveauMessage(sMessage);
}
}
public void Start()
{
if(opcClient == null)
{
if(ArgumentsList == null)
{
Init();
}
opcClient = new EasyDAClient();
opcClient.Isolated = true;
handles = opcClient.SubscribeMultipleItems(ArgumentsList.ToArray(), OnItemChanged);
}
}
public void Stop()
{
if (opcClient != null)
{
opcClient.UnsubscribeMultipleItems(handles);
opcClient.Dispose();
opcClient = null;
ArgumentsList = null;
}
sMessage = "...";
if (NouveauMessage != null)
{
NouveauMessage(sMessage);
}
}
private void OnItemChanged(object sender, EasyDAItemChangedEventArgs eventArgs)
{
string Msg = "";
if (eventArgs.Vtq.HasValue)
{
Msg = string.Format("DT = {0} / ID = {1} / Val = {2} / Qualité = {3}",
eventArgs.Vtq.Timestamp,
eventArgs.Arguments.ItemDescriptor.ItemId,
eventArgs.Vtq.DisplayValue(),
eventArgs.Vtq.Quality.ToString()
);
if (NouvelleValeur != null)
{
NouvelleValeur(Msg);
}
}
}
public string Lecture(string sTag)
{
string sRet = "";
if (opcClient != null)
{
sRet = opcClient.ReadItemValue("OPCLabs.KitServer.2", new DAItemDescriptor(sTag)).ToString();
}
return sRet;
}
public string GetHandles()
{
string sRet = "";
if (opcClient != null)
{
sRet = handles.Length.ToString();
}
return sRet;
}
public void Dispose()
{
throw new NotImplementedException();
}
}
Please Log in or Create an account to join the conversation.
- Forum
- Discussions
- QuickOPC-Classic in .NET
- General Issues, Building
- memory and handles leak in 64 bit version ?