Aaron Bertrand, a blogger on SQLBlog.com and keeper of www.aspfaq.com is one of those SQL Server MVPs whose material is always on my must-read list.  Here's a really useful query he developed to determine the space used by objects in TempDB:

                              SELECT 
                              SPID = s.session_id,
                              s.\[host_name\],
                              s.\[program_name\],
                              s.status,
                              s.memory_usage,
                              granted_memory = CONVERT(INT, r.granted_query_memory*8.00), 
                              t.text,  
                              sourcedb = DB_NAME(r.database_id), 
                              workdb = DB_NAME(dt.database_id), 
                              mg.*,
                              su.*
                              FROM sys.dm_exec_sessions s
                              INNER JOIN sys.dm_db_session_space_usage su 
                              ON s.session_id = su.session_id 
                              AND su.database_id = DB_ID('tempdb') 
                              INNER JOIN sys.dm_exec_connections c 
                              ON s.session_id = c.most_recent_session_id 
                              LEFT OUTER JOIN sys.dm_exec_requests r 
                              ON r.session_id = s.session_id 
                              LEFT OUTER JOIN (
                              SELECT
                              session_id,
                              database_id
                              FROM sys.dm_tran_session_transactions t
                              INNER JOIN sys.dm_tran_database_transactions dt
                              ON t.transaction_id = dt.transaction_id 
                              WHERE dt.database_id = DB_ID('tempdb') 
                              GROUP BY session_id, database_id
                              dt
                              ON s.session_id = dt.session_id
                              CROSS APPLY sys.dm_exec_sql_text(COALESCE(r.sql_handle,
                              c.most_recent_sql_handle)) t
                              LEFT OUTER JOIN sys.dm_exec_query_memory_grants mg 
                              ON s.session_id = mg.session_id 
                              WHERE (r.database_id = DB_ID('tempdb') 
                              OR dt.database_id = DB_ID('tempdb')) 
                              AND s.status = 'running'
                              ORDER BY SPID;

You might consider writing your own query based upon dm_db_session_space_usage but this works quite well.  Thanks for sharing this, Aaron!

Enjoy,

-Kev