While constants and read-only variable share many similarities, there are some important differences:
- Constants are evaluated at compile time, while the read-only variables are evaluated at run time.
- Constants support only value-type variables (the only exception being strings), while read-only variables can hold reference-type variables.
- Constants should be used when the value is not changing during run time, and read-only variables are used mostly when their actual value is unknown before run time.
- Read-only variables can only be initialised at the time of declaration or in a constructor.
Explain what LINQ is.
LINQ is an acronym for Language Integrated Query, and was introduced with Visual Studio 2008. LINQ is a set of features that extends query capabilities to the .NET language syntax by adding sets of new standard query operators that allow data manipulation, regardless of the data source. Supported data sources are: .NET Framework collections, SQL Server databases, ADO.NET Datasets, XML documents, and any collection of objects that support
IEnumerable
or the generic IEnumerable<T>
interface, in both C# and Visual Basic. In short, LINQ bridges the gap between the world of objects and the world of data.
Discuss what garbage collection is and how it works. Provide a code example of how you can enforce garbage collection in .NET.
Garbage collection is a low-priority process that serves as an automatic memory manager which manages the allocation and release of memory for the applications. Each time a new object is created, the common language runtime allocates memory for that object from the managed Heap. As long as free memory space is available in the managed Heap, the runtime continues to allocate space for new objects. However, memory is not infinite, and once an application fills the Heap memory space, garbage collection comes into play to free some memory. When the garbage collector performs a collection, it checks for objects in the managed Heap that are no longer being used by the application and performs the necessary operations to reclaim the memory. Garbage collection will stop all running threads, it will find all objects in the Heap that are not being accessed by the main program and delete them. It will then reorganize all the objects left in the Heap to make space and adjust all the Pointers to these objects in both the Stack and the Heap.
To enforce garbage collection in your code manually, you can run the following command (written in C#):
System.GC.Collect();
Explain deferred execution vs. immediate execution in LINQ. Provide examples.
In LINQ, deferred execution simply means that the query is not executed at the time it is specified. Specifically, this is accomplished by assigning the query to a variable. When this is done, the query definition is stored in the variable but the query is not executed until the query variable is iterated over. For example:
DataContext productContext = new DataContext();
var productQuery = from product in productContext.Products
where product.Type == "SOAPS"
select product; // Query is NOT executed here
foreach (var product in productQuery) // Query executes HERE
{
Console.WriteLine(product.Name);
}
You can also force immediate execution of a query. This can be useful, for example, if the database is being updated frequently, and it is important in the logic of your program to ensure that the results you’re accessing are those returned at the point in your code where the query was specified. Immediate execution is often forced using a method such as Average
, Sum
, Count
, List
, ToList
, or ToArray
. For example:
DataContext productContext = new DataContext();
var productCountQuery = (from product in productContext.Products
where product.Type == "SOAPS"
select product).Count(); // Query executes HERE\
Comments
Post a Comment