|
Hi ...
Thanks to give me some comment.
I was call Dispose function to release any object that i created... but it my code still increase usage memory. in 8 hour, my memory increase 100 KBytes.
Actually i created some service application to accessing a serial port.
Here some code that i used to read a serial port continously:
'------------------------------------------------------------------------
Public Class PLC_Com
Dim MySerial As New System.IO.Ports.SerialPort
Dim MyTimer As System.Threading.Timer
Dim DataByte As Byte
Dim DataResult As String
Dim ReadStatus, WriteStatus As Integer
' Base Setting
Const def_ProtocolName As String = "Dedicated"
Const def_PortName As String = "COM1"
Const def_BaudRate As Integer = 57600
Const def_DataBits As Integer = 8
Const def_StopBits As Integer = 1 ' System.IO.Ports.StopBits.One
Const def_Parity As String = "None" ' System.IO.Ports.Parity.None
Const def_Handshake As String = "None" ' System.IO.Ports.Handshake.None
Const def_TimerInterval As Integer = 1000
Const def_WriteReadInterval As Integer = 100
Const def_RegCapacity As Integer = 1000
Const ACK As Char = Chr(6)
Const NAK As Char = Chr(21)
' Loading User Setting
Dim usr_ProtocolName As String = Nothing
Dim usr_PortName As String = Nothing
Dim usr_BaudRate As Integer = Nothing
Dim usr_DataBits As Integer = Nothing
Dim usr_StopBits As Integer = Nothing
Dim usr_Parity As String = Nothing
Dim usr_Handshake As String = Nothing
Dim usr_TimerInterval As Integer = Nothing
Dim usr_WriteReadInterval As Integer = Nothing
Dim usr_RegCapacity As Integer = Nothing
' System address
Dim ComStatus As String = Nothing
Dim RegIOCount As Integer = 0
Dim RegIOCountBuff As Integer = 0
Dim RegIOArray(3, 1) As String 'RegIOArray format (Command, Type, Value)
Const iRegCmd As Integer = 0
Const iRegMode As Integer = 1
Const iRegVal As Integer = 2
Dim i As Integer = 0
Dim BuffStr As String = Nothing
Public Sub New()
MyBase.New()
' This call is required by the Windows Form Designer.
InitializeComponent()
End Sub
'------------------------------------------------------------------------
' My Service start
'------------------------------------------------------------------------
Protected Overrides Sub OnStart(ByVal args() As String)
' Initilize Service Parameter, Reinitialize PLC IO Register buffer
Call Load_ServiceSetting()
ReDim RegIOArray(3, usr_RegCapacity)
Call Load_IO_Configuration()
' Delegating Timer event
System.IO.File.AppendAllText("C:\ServiceLog.txt", "MyService was started at : " & Now.ToString() & vbCrLf)
Dim tDelegate As Threading.TimerCallback = AddressOf EventAction
' Activation a timer
MyTimer = New System.Threading.Timer(tDelegate, Me, 0, usr_TimerInterval)
End Sub
Protected Overrides Sub OnStop()
System.IO.File.AppendAllText("C:\ServiceLog.txt", "MyService was stoped at : " & Now.ToString() & vbCrLf)
End Sub
'----------------------------------------------------------------
' FUNCTION SECTION
'----------------------------------------------------------------
Dim j As Integer = 0
Public Sub EventAction(ByVal sender As Object)
For RegIOCountBuff = 0 To RegIOCount - 1
If RegIOArray(iRegMode, RegIOCountBuff) = "R" Then
ComStatus = Read_PLC_Reg(RegIOArray(iRegCmd, RegIOCountBuff))
RegIOArray(iRegVal, RegIOCountBuff) = ComStatus
End If
If RegIOArray(iRegMode, RegIOCountBuff) = "W" Then
If j = 1000 Then j = 0 Else j += 1
RegIOArray(iRegVal, RegIOCountBuff) = CStr(j)
ComStatus = Write_PLC_Reg(RegIOArray(iRegCmd, RegIOCountBuff), j)
End If
Select Case ComStatus
Case "Error0"
System.IO.File.AppendAllText("C:\ServiceLog.txt", "NAK detected in PLC response with command " & RegIOArray(iRegCmd, RegIOCountBuff) & " at : " & Now.ToString() & vbCrLf)
Case "Error1"
System.IO.File.AppendAllText("C:\ServiceLog.txt", "Length of PLC response Not Valid with command " & RegIOArray(iRegCmd, RegIOCountBuff) & " at : " & Now.ToString() & vbCrLf)
Case "Error2"
System.IO.File.AppendAllText("C:\ServiceLog.txt", "No response from PLC with command " & RegIOArray(iRegCmd, RegIOCountBuff) & " at : " & Now.ToString() & vbCrLf)
Me.Stop()
Case "Error3"
System.IO.File.AppendAllText("C:\ServiceLog.txt", "Error while reading SerialPort at : " & Now.ToString() & vbCrLf)
Me.Stop()
End Select
System.Threading.Thread.Sleep(50)
Next
End Sub
Private Function Read_PLC_Reg(ByVal CmdString As String) As String
Try
DataResult = ""
If MySerial.IsOpen = False Then MySerial.Open()
MySerial.Write(Chr(5) & CmdString & Chr(4))
System.Threading.Thread.Sleep(usr_WriteReadInterval)
If MySerial.BytesToRead > 0 Then
For i = 0 To MySerial.BytesToRead - 1
DataByte = MySerial.ReadByte
DataResult += Chr(DataByte)
Next
If DataResult.Length > 14 Then
If Microsoft.VisualBasic.Left(DataResult, 1) <> NAK Then
Return Microsoft.VisualBasic.Mid(DataResult, 11, 4)
Else
Return "Error0"
Exit Try
End If
Else
Return "Error1"
Exit Try
End If
Else
Return "Error2"
Exit Try
End If
Catch ex As Exception
If MySerial.IsOpen Then MySerial.Close()
Return "Error3"
Exit Try
End Try
End Function
Private Function Write_PLC_Reg(ByVal CmdString As String, ByVal RegValue As String) As String
Try
DataResult = ""
If MySerial.IsOpen = False Then MySerial.Open()
MySerial.Write(Chr(5) & CmdString & StrTo4Str(Hex(RegValue)) & Chr(4))
System.Threading.Thread.Sleep(usr_WriteReadInterval)
If MySerial.BytesToRead > 0 Then
For i = 0 To MySerial.BytesToRead - 1
DataByte = MySerial.ReadByte
DataResult += Chr(DataByte)
Next
If DataResult.Length > 6 Then
If Microsoft.VisualBasic.Left(DataResult, 1) <> NAK Then
Return "OK"
Else
Return "Error0"
Exit Try
End If
Else
Return "Error1"
End If
Else
Return "Error2"
Exit Try
End If
Catch ex As Exception
If MySerial.IsOpen Then MySerial.Close()
Return "Error3"
Exit Try
End Try
End Function
Sub Load_ServiceSetting()
BuffStr = ""
Try
' Reading User setting from file
Dim FileSetting As New System.IO.StreamReader("C:\ServiceSetting.txt")
BuffStr = FileSetting.ReadLine
BuffStr = FileSetting.ReadLine
BuffStr = FileSetting.ReadLine
BuffStr = FileSetting.ReadLine
usr_ProtocolName = FileSetting.ReadLine
BuffStr = FileSetting.ReadLine
usr_PortName = FileSetting.ReadLine
BuffStr = FileSetting.ReadLine
usr_BaudRate = CInt(FileSetting.ReadLine)
BuffStr = FileSetting.ReadLine
usr_DataBits = CInt(FileSetting.ReadLine)
BuffStr = FileSetting.ReadLine
usr_StopBits = CInt(FileSetting.ReadLine)
BuffStr = FileSetting.ReadLine
usr_Parity = FileSetting.ReadLine
BuffStr = FileSetting.ReadLine
usr_Handshake = FileSetting.ReadLine
BuffStr = FileSetting.ReadLine
usr_TimerInterval = CInt(FileSetting.ReadLine)
BuffStr = FileSetting.ReadLine
usr_WriteReadInterval = CInt(FileSetting.ReadLine)
BuffStr = FileSetting.ReadLine
usr_RegCapacity = CInt(FileSetting.ReadLine)
FileSetting.Close()
FileSetting.Dispose()
Catch ex As Exception
usr_ProtocolName = def_ProtocolName
usr_PortName = def_PortName
usr_BaudRate = def_BaudRate
usr_DataBits = def_DataBits
usr_StopBits = def_StopBits
usr_Parity = def_Parity
usr_Handshake = def_Handshake
usr_TimerInterval = def_TimerInterval
usr_WriteReadInterval = def_WriteReadInterval
usr_RegCapacity = def_RegCapacity
System.IO.File.AppendAllText("C:\ServiceLog.txt", "Loading SerialPort deafault configuration at : " & Now.ToString() & ". Error : " & ex.ToString & vbCrLf)
Finally
' Seting up Serial Port parameter
MySerial.PortName = usr_PortName
MySerial.BaudRate = usr_BaudRate
MySerial.DataBits = usr_DataBits
Select Case usr_StopBits
Case 0 : MySerial.StopBits = System.IO.Ports.StopBits.None
Case 1 : MySerial.StopBits = System.IO.Ports.StopBits.One
Case 2 : MySerial.StopBits = System.IO.Ports.StopBits.Two
Case Else
MySerial.StopBits = System.IO.Ports.StopBits.None
End Select
Select Case usr_Parity
Case "None" : MySerial.Parity = System.IO.Ports.Parity.None
Case "Odd" : MySerial.Parity = System.IO.Ports.Parity.Odd
Case "Even" : MySerial.Parity = System.IO.Ports.Parity.Even
Case Else
MySerial.Parity = System.IO.Ports.Parity.None
End Select
Select Case usr_Handshake
Case "None" : MySerial.Handshake = System.IO.Ports.Handshake.None
Case "RequestToSend" : MySerial.Handshake = System.IO.Ports.Handshake.RequestToSend
Case "RequestToSendXOnXOff" : MySerial.Handshake = System.IO.Ports.Handshake.RequestToSendXOnXOff
Case Else
MySerial.Handshake = System.IO.Ports.Handshake.None
End Select
MySerial.Encoding = System.Text.Encoding.Default
System.IO.File.AppendAllText("C:\ServiceLog.txt", "SerialPort was initialized at : " & Now.ToString() & vbCrLf)
End Try
End Sub
Private Sub Load_IO_Configuration()
BuffStr = ""
RegIOCount = 0
Try
' Reading PLC IO Register from file
Using FileIOReg As System.IO.StreamReader = New System.IO.StreamReader("C:\ServiceIO.txt")
BuffStr = FileIOReg.ReadLine()
Do
BuffStr = FileIOReg.ReadLine()
If (BuffStr <> Nothing) Or (BuffStr <> "") Then
RegIOArray(iRegCmd, RegIOCount) = BuffStr
RegIOCount += 1
End If
Loop Until BuffStr Is Nothing
FileIOReg.Close()
FileIOReg.Dispose()
For i = 0 To RegIOCount - 1
RegIOArray(iRegMode, i) = Microsoft.VisualBasic.Mid(RegIOArray(0, i), 3, 1)
Next
End Using
System.IO.File.AppendAllText("C:\ServiceLog.txt", "PLC IO Register was initialized at : " & Now.ToString() & vbCrLf)
Catch ex As Exception
System.IO.File.AppendAllText("C:\ServiceLog.txt", ex.ToString & vbCrLf) '"Error while reading PLC IO Register "
End Try
End Sub
Private Function StrTo4Str(ByVal Data As String) As String
Dim Hasil As String = ""
Select Case Len(Data)
Case 1 : Hasil = "000" & Data
Case 2 : Hasil = "00" & Data
Case 3 : Hasil = "0" & Data
Case 4 : Hasil = Data
End Select
Return Hasil
End Function
End Class
the procedure :
Call Load_ServiceSetting()
ReDim RegIOArray(3, usr_RegCapacity)
Call Load_IO_Configuration()
is call when my service run fist time.
|
|
|
|
|
Don't keep things around that you no longer need; examples: when no longer needed
- a Form should be closed, not hidden;
- a file, a socket, ... should be closed;
- an object should be removed from whatever collection it happens to be in (List,
ArrayList,...).
As far as Dispose() goes, adding to what Christian said, most people seem to
forget Disposing of dialogs (don't know if that really is relevant to server software)
You are not calling CreateGraphics by any chance ? Most methods with create in their
name return objects that you should also dispose of.
|
|
|
|
|
|
Do you know any free profiler (without time limit) that would do
a reasonable job at it ?
TIA
|
|
|
|
|
Nope I haven't found one yet, although I have been looking ... let me know if you do!
|
|
|
|
|
i think there are not free.... we must buy
|
|
|
|
|
if you will use
gc.waitforpendingfinalizers
gc.collect()
at the end of every function or process this would save lot of memory. My Application had the same problem but using this reduced the size of memory usage.
hope this helps
|
|
|
|
|
hi...
So, i must call a GC function in my function. I never used it before but i will try it. thanks to send me a comment
|
|
|
|
|
I need to develope an application that should extract the mail content and send the automatic SMS,MAIL,FAX how cai i do this please gide me...
BalRaj Thoma
|
|
|
|
|
Your question is too broad. Sending email is trivial, you can google for info on fax and SMS components, I think there's articles on this site, also.
Christian Graus - Microsoft MVP - C++
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
in the window application setup properties, there is a button by the name of prerequisites. When i clicked that , i got three options there.
1.Download prerequisites from the component vendor web site
2.download prerequisite from the same location as my application
3.download prerequisite fom the following location
and there is a list box , which is having exe's components.
.net framework is checked there.
can somebody please explain me these things
Sonia Gupta
Soniagupta1@yahoo.co.in
Yahoo messengerId-soniagupta1
Love is Friendship and Friendship is Love....
|
|
|
|
|
1. vendor website= Microsoft Website (Framework is free)
2. From the location of your PC
3. self explanatory.
--------------------------------
txtSignature
|
|
|
|
|
one moe question i wanted to ask.
using option2, is there any need left -- to install the .net project on the machine not having the .net framework -- to install the .net framework manually.
Sonia Gupta
Soniagupta1@yahoo.co.in
Yahoo messengerId-soniagupta1
Love is Friendship and Friendship is Love....
|
|
|
|
|
Look, the bottom line is...
.Net framework available in PC = No need to install
.Net framework is NOT available in PC = Need to install
(Both are applicable for any .NET program to run)
--------------------------------
txtSignature
|
|
|
|
|
if i choose the option2 download prerequisite from the same location as my application, that means , in this case the framework should be placed with the setup.msi file?so that the setup file automatically detects the framework
Sonia Gupta
Soniagupta1@yahoo.co.in
Yahoo messengerId-soniagupta1
Love is Friendship and Friendship is Love....
|
|
|
|
|
Yes
--------------------------------
txtSignature
|
|
|
|
|
Hi all Coders
Now that windows vista is becoming increasingly more popular, I find that existing packages that were developed still have the look and feel of windows Xp , How can I as an aspiring developer create screen that have a more modern look and feel similar to the forms in windows vista.
Regards Ozzy
|
|
|
|
|
Hello,
i want to make a perticular column of a windows datagrid control as invisible,
i know how to do the same in web control,....
if anyone is aware of this, please help me
waiting for your reply...
|
|
|
|
|
Hi! All,
My VB program is send mail by using OsSMTP.DLL and I am sending HTML message of the Email as a string. But in the string I am sending unicode character like "ử" but they are not properly displayed at user's browser. I have already set . Can anyone help me in this?
Thanks and Regards,
Virendra
|
|
|
|
|
Hi All
I Want To Create A Circular Control (In Visual Basic 6)
Please Guide Me
Tanks.
Mogtabam
|
|
|
|
|
don't know if it exists in vb6
but in .net this can be done with the region property
see if vb6 has one to
|
|
|
|
|
Hi & Tanks
Please Guide Me In VB.NET (If Posible)
Tanks.
Mogtabam
|
|
|
|
|
this is how to do it in vb.Net
<br />
Dim arrRegion As ArrayList 'fill the arraylist with points<br />
If Not arrRegion.Count = 0 Then<br />
Dim pntRegion(arrRegion.Count) As Point<br />
pntRegion = arrRegion.ToArray(GetType(Point))<br />
Dim c As New System.Drawing.Drawing2D.GraphicsPath<br />
c.ClearMarkers()<br />
c.AddCurve(pntRegion) 'you can add other shapes <br />
If Not c Is Nothing Then<br />
Me.Region = New Region(c) 'here the control is redrawn with you'r points<br />
End If<br />
End If<br />
hope this helps
|
|
|
|
|
Hi & Tanks
Tank You For Your Guides
Mogtabam
|
|
|
|
|