c# pointers ?
-
Depends on how many objects of your class you'll have/load at a time. If you have many each of them keeping a few mb of data, not so OK. A different approach(that I mostly use) is to create separate methods in the "DataLayer" one that loads only id and name(null or zero sized/empty byte[]). And another one thatn loads the byte[] too, or maybe just the byte[] for a given ID. That way a much lower impact on memory and speed too(given that the byte[] can be easily retrieved by using the ID in the DB if any). In other words load the few mb only when required/needed. My post/answer utterly assumes that there is a DB somewhere. If not, please ignore it.
All the best, Dan
essentially what i'm doing yes except the database is over the wire and the data is downloaded on demand my actual question is explained better above thnx :)
"mostly watching the human race is like watching dogs watch tv ... they see the pictures move but the meaning escapes them"
-
l a u r e n wrote:
should i simply use the existing class
Sure, but maybe it needs a ToString method?
no idea what this means / relates to but thanks for trying to help :)
"mostly watching the human race is like watching dogs watch tv ... they see the pictures move but the meaning escapes them"
-
well ok so i have a List<> of POCO objects that are serialized into json and back for transport over the wire from a web service ... now i don't send the actual data bytes with the list of items just the id and name (the data bytes can be several mb) and request the actual data bytes on demand ... once they are loaded from the server they are stored in memory in the List<> my main form has a function to get a given document from the List<> ... that causes the doc class to see if the data is there, and if not, go get it and set a flag saying we have it now then it returns the doc.doc_data which is a byte [] variable my actual question is this: when i do "return doc.doc_data" does it make a copy of the data on the stack and pass it back, or does it simply return a ptr / ref to that data? the 1st option would be very bad .... the 2nd is what i hope happens but i don't know how to tell what it is doing hope that explains it better :)
"mostly watching the human race is like watching dogs watch tv ... they see the pictures move but the meaning escapes them"
l a u r e n wrote:
my actual question is this: when i do "return doc.doc_data" does it make a copy of the data on the stack and pass it back, or does it simply return a ptr / ref to that data?
Depends on the code in the property/method returning the array... is it making a copy and returning a reference to that copy or just returning a reference to the original data? Arrays are reference types. For reference types you need to explicitly make a copy of the data to have two copies. Otherwise a reference refers to the same object, even if you make a copy of the reference. Pointers are so not relevant here... :)
Mark Salsbery Microsoft MVP - Visual C++ :java:
-
l a u r e n wrote:
my actual question is this: when i do "return doc.doc_data" does it make a copy of the data on the stack and pass it back, or does it simply return a ptr / ref to that data?
Depends on the code in the property/method returning the array... is it making a copy and returning a reference to that copy or just returning a reference to the original data? Arrays are reference types. For reference types you need to explicitly make a copy of the data to have two copies. Otherwise a reference refers to the same object, even if you make a copy of the reference. Pointers are so not relevant here... :)
Mark Salsbery Microsoft MVP - Visual C++ :java:
i know pointers aren't really the thing here i guess i was asking if the function returns a pointer to the data or a copy of the data that's what i do not quite get in c# lets say i have a class:
class doc {
int doc_id;
string doc_title;
byte [] doc_data;
public doc()
{
doc_id = 0;
doc_title = string.Empty;
doc_data = null;
}byte [] getdoc()
{
if (doc_data == null){
doc_data = get_the_data_from_somewhere_over_the_network(id);
}
return doc_data;
}
}does the getdoc() function return a copy of the data or a ptr to the data? :)
"mostly watching the human race is like watching dogs watch tv ... they see the pictures move but the meaning escapes them"
-
i know pointers aren't really the thing here i guess i was asking if the function returns a pointer to the data or a copy of the data that's what i do not quite get in c# lets say i have a class:
class doc {
int doc_id;
string doc_title;
byte [] doc_data;
public doc()
{
doc_id = 0;
doc_title = string.Empty;
doc_data = null;
}byte [] getdoc()
{
if (doc_data == null){
doc_data = get_the_data_from_somewhere_over_the_network(id);
}
return doc_data;
}
}does the getdoc() function return a copy of the data or a ptr to the data? :)
"mostly watching the human race is like watching dogs watch tv ... they see the pictures move but the meaning escapes them"
l a u r e n wrote:
does the getdoc() function return a copy of the data or a ptr to the data?
It returns a reference to doc_data. No copy is made. The reference "refers" to the same exact data the doc_data field "refers" to.
l a u r e n wrote:
i guess i was asking if the function returns a pointer to the data or a copy of the data
that's what i do not quite get in c#In .NET, this is arguably THE fundamental thing that must be understood, especially if you come from a language like C/C++. Except for simple classes that are defined as value types (which are copied when you do an assignment), most classes are reference types, so any time you pass/return objects of those classes you pass/return references to an object - the SAME object. The implication is that if you alter that object, every other place there's a reference held on that same object is effected. This MUST be understood... Types (C# Reference)[^]
Mark Salsbery Microsoft MVP - Visual C++ :java:
-
l a u r e n wrote:
does the getdoc() function return a copy of the data or a ptr to the data?
It returns a reference to doc_data. No copy is made. The reference "refers" to the same exact data the doc_data field "refers" to.
l a u r e n wrote:
i guess i was asking if the function returns a pointer to the data or a copy of the data
that's what i do not quite get in c#In .NET, this is arguably THE fundamental thing that must be understood, especially if you come from a language like C/C++. Except for simple classes that are defined as value types (which are copied when you do an assignment), most classes are reference types, so any time you pass/return objects of those classes you pass/return references to an object - the SAME object. The implication is that if you alter that object, every other place there's a reference held on that same object is effected. This MUST be understood... Types (C# Reference)[^]
Mark Salsbery Microsoft MVP - Visual C++ :java:
thank you so much for the time you took to explain that much appreciated :)
"mostly watching the human race is like watching dogs watch tv ... they see the pictures move but the meaning escapes them"
-
l a u r e n wrote:
does the getdoc() function return a copy of the data or a ptr to the data?
It returns a reference to doc_data. No copy is made. The reference "refers" to the same exact data the doc_data field "refers" to.
l a u r e n wrote:
i guess i was asking if the function returns a pointer to the data or a copy of the data
that's what i do not quite get in c#In .NET, this is arguably THE fundamental thing that must be understood, especially if you come from a language like C/C++. Except for simple classes that are defined as value types (which are copied when you do an assignment), most classes are reference types, so any time you pass/return objects of those classes you pass/return references to an object - the SAME object. The implication is that if you alter that object, every other place there's a reference held on that same object is effected. This MUST be understood... Types (C# Reference)[^]
Mark Salsbery Microsoft MVP - Visual C++ :java:
-
thank you so much for the time you took to explain that much appreciated :)
"mostly watching the human race is like watching dogs watch tv ... they see the pictures move but the meaning escapes them"
You're welcome! Better explained at the link... :)
Mark Salsbery Microsoft MVP - Visual C++ :java:
-
Mark Salsbery wrote:
Except for simple classes that are defined as value types
Aka structs?
Yes! Value Types (C# Reference)[^]
Mark Salsbery Microsoft MVP - Visual C++ :java:
-
Yes! Value Types (C# Reference)[^]
Mark Salsbery Microsoft MVP - Visual C++ :java: