Я не знаю, что это полностью подотчетно здесь, но вот вам начало ... Другие ответы касаются конкретных проблем с памятью, но, во-первых, вам нужно понять, как память выделяется и освобождается (зарезервировано, используется и выпущен) компьютером, средой выполнения .NET и, в свою очередь, вашей программой.
Тогда вам нужно понять код достаточно хорошо, чтобы понять, какие функции выполняются для каждого пользователя, и посмотреть, сколько памяти используется. Оттуда вы можете проникнуть в свой код и отследить проблемы, но вам нужно твердое понимание основ.
На вашем месте я бы начал с этой статьи и планировал бы уделять больше времени исследованиям и изучению. К счастью, эта статья не только ответит на вопросы, но и даст вам достаточно знаний, чтобы задавать более конкретные / лучшие вопросы. Это хорошая статья, и я верю, что она действительно поможет вам, но это еще не все, что вам нужно. Здесь есть чему поучиться.
http://msdn.microsoft.com/en-us/magazine/cc188781.aspx
Эта статья немного устарела, и я предполагаю, что вы используете более свежие инструменты, поэтому, когда вы закончите переваривать эту статью, перейдите к http://msdn.microsoft.com/en-us/library/ms182372.aspx, чтобы узнать о Visual Studio Profiler.