Bu bir C döndürülen değeri işlemek için hiç de iyi değil# yöntem? Bu örnekte iyi bir uygulama nedir?
Meraktan soruyorum...bazı değer döndüren bir yöntem diyoruz ama/almıyoruz ne olur bunu kullanmak? Ve biz de bazen bu verilen değeri çok büyük görüşünde. Bu değer nereye gidiyor? Hatta oluşturulur? Eğer varsa, oluşabilecek herhangi bir performans sorunları ya da başka sorunlar var mı? (Peki böyle bir durumda en iyi yöntem nedir?)
Hadi veritabanı işlemleri (ınsert, update) ve döner bazı DataTable nesnesinde bazı veriler geliyor bu yöntem. Ve ben de bu DataTable nesnesi gerçekten büyük bazen olabileceğini biliyorum:
public static Datatable InsertIntoDB(...)
{
// executing db command, getting values, creating & returning Datatable object...
...
return myDataTable;
}
Ve sonra bu yöntem kullanıldığında bu gibi denir:
DataTable myDataTable = InsertIntoDB(...);
// this Datatable object is handled in some way
Ama bazen sadece bu gibi:
InsertIntoDB(...);
// returned value not handled; Problem???
Benim ilk düşünce düşünme sistemidir zeki görmek döndürülen değer göz ardı edilir ve neden olmaz herhangi bir sorun (sadece serbest) ama ben istiyorum emin ve duymak daha ayrıntılı bir açıklama değil de biri daha deneyimli bu alanda daha beni.
CEVAP
Döndürülen değer (veya başvuru, bir başvuru türü ise) bu da yığına itilir ve sonra yine yerinden fırladı.
Hiçbir biggy.
Eğer dönüş değeri ilgili değil ise, güvenli bir şekilde bunu yapabilirsiniz.
Ama her ihtimale karşı ilgisi olmadığından emin olun.
İşte bazı kod:
static string GetSomething()
{
return "Hello";
}
static void Method1()
{
string result = GetSomething();
}
static void Method2()
{
GetSomething();
}
Eğer IL bakacak olursak:
Method1:
.locals init ([0] string result)
IL_0000: nop
IL_0001: call string ConsoleApplication3.Program::GetSomething()
IL_0006: stloc.0
IL_0007: ret
Method2:
IL_0000: nop
IL_0001: call string ConsoleApplication3.Program::GetSomething()
IL_0006: pop
IL_0007: ret
Talimatları aynı sayıda tam olarak. Bu değer, yerel dize sonucu (stloc.saklanır Method1, Kapsam dışına çıktığında silinir. 0), Sadece yığından kaldırır, Method2.
Dönen bir dava 'çok büyük', veri önceden oluşturulmuş ve yöntemi başvuru; verinin kendisi değil döndürür. Referans yerel değişkene atanır ve Çöp toplayıcı değişken kapsam dışında olması, bu yöntemi sonuna) gitti sonra o kadar düzenli olacak. Method1(), Method2(), herhangi bir zaman başvuru yığından attı sonra çöp toplayıcı işe alabilirsiniz.
Eğer gerçekten ihtiyacı varsa ... dönüş değeri göz ardı ederek, çöp toplayıcı potansiyel olarak daha erken çalışmak üzere görevlendirilmiş olan herhangi bir bellek bırakın. Ama içinde çok az var (kesinlikle bu durumda), ama uzun süren bir yöntem ile, bu veri üzerine asılı bir sorun olabilir.
Ama uzak-ve en önemli şey görmezden geldiğin dönüş değeri üzerinde etkili olmanız gereken bir şey olmadığından emin olmak.
Kötü uygulama alıcı benim yöntem depol...
Size_t maksimum değeri bulmak için taş...
Win odaklı kontrol bulmak için tercih ...
Java singleton deseni uygulamak için e...
Bu uygulama geliştiricileri Facebook G...