NI Ürünleri İle İlgili Tartışmalar

cancel
Showing results for 
Search instead for 
Did you mean: 

not enough memory to complete this operation

Yazılımdan  "not enough memory to complete this operation" hatasını alıyorum. Bu hatanın olası sebebleri neler olabilir. İnternette genel bir çözüme rastlamadım. Uzun süreli çalışan bir yazılım ancak 2GB Ram Windows7 bilgisayar özellikleri. Aynı zamanda yazılımda DLL de kullanıyorum. Ancak bu hata labview den diye düşünüyorum. Yardımcı olabilir misiniz ? 

http://forums.ni.com/t5/LabVIEW/not-enough-memory-to-complete-this-operation/m-p/3069312

 

Yukarıdaki linkte oluşan ekran görüntüsü var.

0 Kudos
Message 1 of 10
(4,339 Views)

Merhabalar Serkan Bey,

 

Yazılımınızda muhtemelem kümülatif olarak artan bir memory kullanımı var. Bunun birçok sebebi olabilir. Örneğin bir buffer mekanizmanız varsa( Queue etc.) bunu consume eden kısım yavaş kalıp zamanla birikme olacaktır. Bir diğeri çok büyük array'ler ile işlem yaparken dikkatli olmanız gerekir, tamamı üzerinde işlem yapmak yerine parçalayarak işlem yapmak ram kullanımını düşürecektir. Bir diğeride açmış olduğunuz kaynakların/referansların close/dispose edilmemesidir.Hata yüksek ihtimal labview'den değil kodun optimize olmamasındandır. Şüphelendiğiniz bir kod parçası varsa benimle özelden paylaşırsanız sizlere daha fazla yardımcı olabilirim.

 

Saygılarımla...

Himmet GENCER
Software Development Coordinator at TDG
himmetgencer@gmail.com

View Himmet Gencer's profile on LinkedIn

View on Instagram
Message 2 of 10
(4,335 Views)

Merhaba Himmet Bey,

Verdiğiniz olası sebepler üzerinden gideceğim. Ve hatayı tekrarlamaya çalışacağım. Hatanın yerini bulunca burdan paylaşırım. 

 

İyi çalışmalar,

0 Kudos
Message 3 of 10
(4,318 Views)

Himmet Bey'in söylediklerinin tamamı olabilir. Özellikle ise şuna dikkat edin;

"Initialize Array" kullandığınız bir yer varsa ve boyutunu dinamik ayarlıyorsanız muhtemelen boyutu beklenmedik bir değer alıyor ve oluşturmaya çalıştığınız dizi RAM sınırlarını aşacak kadar büyük oluyor. Eğer durum buysa ya hata oluştuğunda böyle bir dizi oluşmasını engelleyin (Error Case kullanarak) yada dizi boyutu için gelen değere sınırlandırma yapın ("Max & Min" kullanarak hızlıca yapabilirsiniz).

 

Diğer yüksek olasılık ise sürekli ekleme yaptığınız ancak boyutunu sınırlandırmadığınız diziler olabilir. "Build Array" yada "Insert Into Array" kullandığınız yerleri kontrol edin. Bu sorun belirttiğiniz hatanın çıkmasından önce yazılımda yavaşlamalara sebep olacaktır. Hata böyle bir yerde ise ya sabit boyutlu dizi kullanıp içeriği indekslerle takip edin yada nihai diziyi belli boyuta erişecek şekilde sınırlandırın. Bunun için "Delete From Array" yada "Split Array" kullanabilirsiniz.

 

"Queue" kullanıyorsanız ve hata bunun üzerinde oluşuyorsa muhtemelen eklediğiniz veri çok büyük boyutludur. Genelde resim gibi verileri "metin" yada "xml" e açarak yolladığınızda olabilir. Ama bu hatanın oluşması için yollayacağınız verinin boyutu gerçekten çok büyük olmalıdır. Bundan önce yazılımda yavaşlama hissetmeniz daha muhtemeldir. Hata bundan kaynaklanıyorsa veriyi metne açarak değil de "dvr (data value reference)" üzerinden dağıtmanız daha doğru olacaktır.

 

Tahminim ilk olasılık 🙂

Message 4 of 10
(4,307 Views)

Zafer Bey, RAM ile ilgili sorunları çok fazla yaşıyorum. Optimum çözüme ulaşmakta sıkıntı yaşıyorum. "Queue" kullanmıyorum. 2D array 20-30 tane ölçümü saniye de bir biriktiriyor. 4 gün sonra falan hata geliyor. Array init state de sadece ilk çalışırken reinit yapılıyor. C# da kullanılan Garbace Collector tarzı birşeye ihtiyacım olabilir (0 ms wait bu işe yarıyor sanırım, emin de değilim.). dll de kullanılan try catch blogundan sürekli hata gelmesi de sorun olabilir mi acaba diye düşünüyorum. Hatayı analiz edemedim henüz. Detaylı açıklamalar için teşekkür ederim. Yardımcı olacağını düşünüyorum.  

0 Kudos
Message 5 of 10
(4,292 Views)

"2D array 20-30 tane ölçümü saniye de bir biriktiriyor." derken devamlı ucuna mı ekleme yapıyor?

Himmet GENCER
Software Development Coordinator at TDG
himmetgencer@gmail.com

View Himmet Gencer's profile on LinkedIn

View on Instagram
0 Kudos
Message 6 of 10
(4,283 Views)

Evet sürekli ucuna ekliyor. Şimdilik bir kısıtlama yok yazılımda. Yapılmalı öı ? Yapılmalıysa kararını nasıl vermeliyim ? Grafik ekranında günlerce kayıt edilen dataların gösterilmesi gerekiyor. 

0 Kudos
Message 7 of 10
(4,280 Views)

"2D array 20-30 tane ölçümü saniye de bir biriktiriyor. 4 gün sonra falan hata geliyor."

Himmet Bey'in de belirttiği gibi sorun muhtemelen burada. Labview'de DVR (data value reference) ya da .NET kullanmıyorsanız "garbage collector/dispose" türünden birşey kullanmanız gerekmez. Yapmanız gereken verileri dizide değil dosyada tutmak. Dizi içeriğini belli aralıklarla dosyaya yazın ve dizi içeriğini boşaltın.

 

Kodu eklerseniz nereye müdahale edeceğinizi gösterebiliriz.

Message 8 of 10
(4,279 Views)

Merhabalar, 

 

Verileri devamlı bir dosyaya kaydedin. Grafiğin gösterebileceği maksimum point size'ı belirleyin (50000 mesela). Dosyada şu ana kadar kaç adet veri olduğunu bulup, maksimum 50000 data olacak şekilde decimation yaparak(atlayarak) verilerinizi grafiğe  aktarabilirsiniz. Örneğin 1. gün sonunda 40000 datanız var bunu direk grafiğe verebilirsiniz,fakat bir süre sonra veri sayınız 100000 oldu, dosyadan 2şer atlayarak verilerinizi okuyup grafiğe çizdirin. 

 

Saygılarımla... 

Himmet GENCER
Software Development Coordinator at TDG
himmetgencer@gmail.com

View Himmet Gencer's profile on LinkedIn

View on Instagram
Message 9 of 10
(4,273 Views)

Merhaba Himmet Bey, Zafer Bey,

2-3 saat gibi aralıklarla kayıt alıyorum. Dosyalama sistemi var. Birden fazla dosya tutuluyor. Ancak dediğiniz gibi tüm datayı grafiğe aktarmak adına 2D arrayi ilk andan sonra hiç reinit yapmıyorum. Array kayıt aldıkça temizlenip ekrana kayıt alınan dosyadan okunan data grafik edilebilir. Anlattılanlar bunu anladım. Kodu basitleştirip örnek bir uygulama koyarım, vakit ayırabilirsem. Sizde anlattıklarınıza uygun temel bir example varsa paylaşırsanız sevinirim. 

İyi çalışmalar 

0 Kudos
Message 10 of 10
(4,253 Views)