title: Effective use of static fields and methods in a class? Initialised in the constructor or in declaration? I need guidance
body: <p>I know that it exist numerous questions about when to use or not use static fields and methods in Object Oriented Programming, but most examples boils down to using Math.Pi or similar simplified examples.</p>
  
  <p>I have a serious defunct as a programmer, and it is caused by my disability to conform to OOP programming in general I guess. If it was up to me I'd use a functional approach to many of my programs, but my fellow programmers does not necessarily agree.</p>
  
  <p>I understand that not all problems are best solved in an OOP context, but I'll try to present a problem I'm currently facing that I believe would be best solved with OOP techniques.</p>
  
  <p>My main problem is that I don't understand how to best utilize system resources when using OOP in C#. I can't visualize the memory allocation and flow of execution when introducing static fields and methods to my classes, and when to declare a resource as static or non-static.</p>
  
  <p>So, this is a short explanation of my problem at hand:</p>
  
  <p>I need to develop a "utility" that synchronises information between two disconnected systems.
  "System 1" operates with "Tickets" containing information about bugs reported by customers and verified by testers. I'm able to access the Ticket contents as objects through a Linq query to the SQL database via .Net's Entity Framework.</p>
  
  <p>"System 2" operates with Work Items that needs to be created based on "System 1"'s Tickets.
  The "utility" needs to keep this information in synch, and it could be changed from both systems. So I need to keep the information about the state of the different objects persistent between program runs.</p>
  
  <p>So I use "System 1"s database (read-only) to create local objects that matches "System 2"s requirements for creating initial Work Items and store the local objects through binary serialisation, so that I can create a new List in the next run and compare the values locally and avoid unnecessary network and server load, then update the systems through their respective API's. </p>
  
  <p>While I have a working solution for doing this, I'm unsure if it runs efficient.
  I have a class (LocalTicket) and a class (LocalWorkItem) that is used to hold state between runs, but the LocalTicket class uses a Database Connection to gather information about Tickets and I've declared a static List to hold the values from the server to compare against the local objects. I don't initialise the list before entering the constructor for the first LocalTicket object and I do so via a LINQ to Object query. </p>
  
  <p>Will this cause my LINQ query to be executed each time a LocalTicket gets created, or just once?
  Would I be better off initialising the List from the LINQ query via a static method in the class, or by having a non-static method populate the List with the objects and demand that calling methods in my utility class creates a new object to be able to compare the objects?
  Or by initialising it directly when defining it? The resulting LocalTickets created from the query's content is used locally and is created anew with each run, to detect the actual changes made to the database through the Help Desk application.</p>
  
  <p>I'm sorry if this seems like a pile of rubbish, but I don't know how to describe it in a more explicative way...</p>
  
  <p>I guess I need some guidance on designing classes that contains calls to external sources that generates objects, like a factory thing or something.</p>
  
  <p>When reading this in context, I'm surprised if anyone would actually be able to give me any advice, but I take my chances...</p>