
Memoria Insuficiente
Publicado por anonymous (1 intervención) el 15/10/2014 20:14:03
Que tal, tengo un problema de memoria insuficiente, lo raro es que al abrir el task manager la aplicacion tiene de 1 a 5 mb utilizados.
Antes de poner un código si se veia que se hiba a 1172 MB y era donde marcaba la Memoria Insuficiente.
La apliacion basicamente hace esto:
Basicamente lo que hace es que obtiene los archivos que estan en un directorio, toma el nombre, lo compara en un bd , hace un update y un insert, despues pasa a ConvertirTienda() y la pasa a resolucion 150x150 en eso la copia a una carpeta nueva y por ultimo lo sube a un FTP. He intendado poner hilos e inclusive el DoEvents() pero se sigue quedando sin memoria. Ahora que puse el CleanMemory, checo en el task manager y sigue con buena memoria pero sigue marcando el mensaje.
Si me pudieran ayudar.
Antes de poner un código si se veia que se hiba a 1172 MB y era donde marcaba la Memoria Insuficiente.
La apliacion basicamente hace esto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
Public Class Form1
Dim conexionSQL = "XXXXXX"
Dim correos As Integer
Private Declare Function GetTickCount Lib "kernel32" () As Integer
'Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Auto Function SetProcessWorkingSetSize Lib "kernel32.dll" (ByVal procHandle As IntPtr, ByVal min As Int32, ByVal max As Int32) As Boolean
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
proceso()
End Sub
Private Sub proceso()
Dim retraso As Integer
Dim cnn As SqlConnection = Nothing
Dim cmd As SqlCommand = Nothing
Dim dtr As SqlDataReader = Nothing
Dim campodevuelto As String
Dim nombreArchivoViejo, extensionArchivo As String
Dim posicionExtension As Integer
Dim cambiarNombre As Boolean
nombreArchivoViejo = ""
extensionArchivo = ""
posicionExtension = 0
cambiarNombre = False
'Ruta de la carpeta de las imagenes
Dim Mi_directorio As DirectoryInfo = New DirectoryInfo("D:\RepositorioImagenes\Destino\Temporal\")
cnn = New SqlConnection(conexionSQL)
cnn.Open()
cmd = New SqlCommand("delete from tmp", cnn)
cmd.ExecuteNonQuery()
cnn.Close()
cnn.Dispose()
'Para cada imagen buscar el nombre del archivo correspondiente
For Each Mi_archivo As FileInfo In Mi_directorio.GetFiles()
'cambiarNombre = False
retraso = 8000 + GetTickCount
nombreArchivoViejo = Mi_archivo.Name
extensionArchivo = Mi_archivo.Extension
'Obtener la posicion final del nombre
posicionExtension = InStr(1, nombreArchivoViejo, extensionArchivo, CompareMethod.Text) - 1
'nombreArchivoNuevo = Mi_archivo.Name 'tiene extension
'Extraer nombre
nombreArchivoViejo = CObj(nombreArchivoViejo.Substring(0, posicionExtension)) 'sin extension
'While retraso >= GetTickCount
Application.DoEvents()
Try
'cnn = New SqlConnection(conexionSQL)
'cmdtru = New SqlCommand("delete from tmp", cnn)
'cmdtru.ExecuteNonQuery()
cnn = New SqlConnection(conexionSQL)
cnn.Open()
cmd = New SqlCommand("select articulo from articulos where articulo =" + nombreArchivoViejo, cnn)
dtr = cmd.ExecuteReader()
If dtr.HasRows Then
dtr.Read()
campodevuelto = CObj(dtr.GetValue(0))
dtr.Close()
cmd = New SqlCommand("select Repositorio from articulos where articulo =" + campodevuelto, cnn)
dtr = cmd.ExecuteReader()
If dtr.HasRows Then
dtr.Read()
If IsDBNull(dtr.GetValue(0)) Then
'es nulo, quiere decir que no existe
dtr.Close()
cmd = New SqlCommand("UPDATE articulos set Repositorio = 1 where articulo = " + campodevuelto, cnn)
cmd.ExecuteNonQuery()
dtr.Close()
cmd = New SqlCommand("insert into tmp select * from articulos where articulo = " + campodevuelto, cnn)
cmd.ExecuteNonQuery()
dtr.Close()
End If
dtr.Close()
End If
'cmdup = New SqlCommand("UPDATE articulos set Repositorio = 1 where articulo = " + campodevuelto, cnn)
'cmdup.ExecuteNonQuery()
'Carga a Tiendas
ConvertirTienda(nombreArchivoViejo)
System.Threading.Thread.Sleep(2000)
'Carga a Alsuper en Casa
'ConvertirCasa(nombreArchivoViejo)
Else
'MsgBox("No se encontro el articulo en la base de datos")
End If
Catch ex As Exception
MsgBox(Err.Description)
Finally
If cnn IsNot Nothing AndAlso cnn.State <> ConnectionState.Closed Then
'cnn.Close()
'cnn.Dispose()
'cmd.Dispose()
End If
End Try
cnn.Dispose()
cmd.Dispose()
cnn.Close()
'End While
Next
dtr.Close()
cmd = New SqlCommand("select count(1) from tmp", cnn)
dtr = cmd.ExecuteReader()
If dtr.HasRows Then
dtr.Read()
correos = Integer.Parse(dtr.GetValue(0))
If correos > 0 Then
'MsgBox("Hay " + dtr.GetValue(0).ToString + " imagenes nuevas")
btnMail.Enabled = True
Else
'MsgBox("No hay imagenes nuevas")
End If
cnn.Close()
End If
'MsgBox("El proceso a finalizado", MsgBoxStyle.Information)
Me.Close()
End Sub
Public Sub ClearMemory()
Try
Dim Mem As Process
Mem = Process.GetCurrentProcess()
SetProcessWorkingSetSize(Mem.Handle, -1, -1)
Catch ex As Exception
'Control de errores
End Try
End Sub
Private Sub ConvertirTienda(Archivo As String)
Dim imagen As New Bitmap(New Bitmap("D:\RepositorioImagenes\Destino\Temporal\" + Archivo + ".jpg"), 150, 150)
imagen.Save("D:\RepositorioImagenes\Destino\Tiendas\" + Archivo + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
ClearMemory()
'Try
'My.Computer.Network.UploadFile(Cargo a FTP")
'Catch ex As Exception
'MsgBox(Err.Description)
'End Try
End Sub
Basicamente lo que hace es que obtiene los archivos que estan en un directorio, toma el nombre, lo compara en un bd , hace un update y un insert, despues pasa a ConvertirTienda() y la pasa a resolucion 150x150 en eso la copia a una carpeta nueva y por ultimo lo sube a un FTP. He intendado poner hilos e inclusive el DoEvents() pero se sigue quedando sin memoria. Ahora que puse el CleanMemory, checo en el task manager y sigue con buena memoria pero sigue marcando el mensaje.
Si me pudieran ayudar.
Valora esta pregunta


0