Merhaba arkadaşlar. XML dökümanı oluşturan bi metot yazdım ancak metot çalıştıktan sonra catch e düşüyo ve

Exception of type 'System.OutOfMemoryException' was thrown. hatası döndürüyor . Yardımcı olursanız sevinirim

Metot bu:

        var sb = new StringBuilder();
        var stringWriter = new StringWriter(sb);
        var xmlWriter = new XmlTextWriter(stringWriter);
        xmlWriter.WriteStartDocument();
        xmlWriter.WriteStartElement("Urunler");
        ISettingService settingService = EngineContext.Current.Resolve<ISettingService>();

        foreach (var product in products)
        {
            var productCategories = _categoryService.GetProductCategoriesByProductId(product.Id).FirstOrDefault();
            var productManufacturers = _manufacturerService.GetProductManufacturersByProductId(product.Id).FirstOrDefault();
            var productVariant = _productService.GetProductVariantsByProductId(product.Id);

            IList<Core.Domain.Media.Picture> pictures = new List<Core.Domain.Media.Picture>();

            foreach (var variant in productVariant)
            {
                pictures = variant.GetProductVariantPictures(_pictureService);

                xmlWriter.WriteStartElement("Urun");

                if (product.Id.ToString() != null)
                {
                    xmlWriter.WriteElementString("urun_id", product.Id.ToString());
                }
                else
                {
                    xmlWriter.WriteElementString("urun_id","");
                }

                if(variant.Name != null )
                {
                   xmlWriter.WriteElementString("baslik",variant.Name);
                }
                else
                {
                   xmlWriter.WriteElementString("baslik", product.Name);
                }

                if (productCategories != null)
                {
                    xmlWriter.WriteElementString("kategori", productCategories.Category.Name);
                }

                if (productManufacturers != null)
                {
                    xmlWriter.WriteElementString("marka", productManufacturers.Manufacturer.Name);
                }

                else
                {
                    xmlWriter.WriteElementString("marka", "");
                }

                if (variant.Currency == null)
                {
                    xmlWriter.WriteElementString("birim", "TRY");
                }

                else
                {
                    xmlWriter.WriteElementString("birim", variant.Currency.CurrencyCode);
                }

                if (pictures != null)
                {
                    xmlWriter.WriteElementString("urun_url", null, _pictureService.GetPictureUrl(pictures.FirstOrDefault()));
                }
                else
                {
                    xmlWriter.WriteElementString("urun_url","");
                }

                    var url = string.Format("{0}p/{1}/{2}", _webHelper.GetStoreLocation(false), product.Id, product.GetSeName());
                    xmlWriter.WriteStartElement("linkhref");
                    xmlWriter.WriteCData(url.ToString());
                    xmlWriter.WriteEndElement();

                if(variant.CurrencyId  == null )
                {
                    xmlWriter.WriteElementString("fiyat", variant.Price.ToString());
                }

                else if (variant.CurrencyId != null && variant.CurrencyId.ToString() == settingService.GetSettingByKey<string>("currencysettings.primarystorecurrencyid"))
                {
                    xmlWriter.WriteElementString("fiyat", variant.Price.ToString());
                }

                else
                {
                    xmlWriter.WriteElementString("fiyat", variant.CurrencyPrice.ToString());
                }

                xmlWriter.WriteEndElement();
            }

        }

        xmlWriter.WriteEndElement();
        xmlWriter.WriteEndDocument();
        xmlWriter.Close();

        return stringWriter.ToString();

soruldu: 18 Ara '13, 03:01

ibal90's gravatar image

ibal90
159333439
cevap kabul oranı: 18%

değiştirildi: 07 Şub '14, 11:12

rahmanyazgan's gravatar image

rahmanyazgan ♦
4.4k83559

1

muhtemelen pictures = variant.GetProductVariantPictures(_pictureService); satırında bu hatayı alıyorsun ya da donen products listesi çok buyuk; xml'e yazdırken fırlatılıyor hata

(18 Ara '13, 06:01) gturedi gturedi's gravatar image

evet liste büyük. 5600 küsür tane ana düğüm var xml de 7 tane de node var yaklaşık 40000 küsür. Ama çözmemiz gerek. Aslında ram ile alakalı bi durum. Çünkü bazen 7-8 dk içinde çıktıyı veriyo bazende hata veriyo.

(18 Ara '13, 08:11) ibal90 ibal90's gravatar image

1000'er parçalara bölüp çıktı almayı deneyebilirsin

(19 Ara '13, 01:33) gturedi gturedi's gravatar image

Multi threading kullanabiliyor isen 5600 adet olan products listesini böl ,her thread objeleri xml string e çevirsin daha sonra bu xml stringleri birleştir ???

permanent link

cevaplandı: 19 Ara '13, 01:31

abdurrahman's gravatar image

abdurrahman
1072
cevap kabul oranı: 0%

hmmm evet thread kullanılabilir. Bunu da denicem. Tşk ederim

(19 Ara '13, 01:34) ibal90 ibal90's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×238
×21
×2

Soruldu: 18 Ara '13, 03:01

Görüntüleme: 1,906 kez

Son güncelleme: 07 Şub '14, 11:12

powered by BitNami OSQA