Problem loading custom post type admin page

WordPress loads the meta values for all the posts in the current query in order to avoid performing an SQL query each time a post meta value is used. In almost all cases, this gives a huge performance benefit.

This pre-caching can be disabled (I’ll get to that in a minute) but, unfortunately for you, storing 400 post meta fields against every post is going to cause you performance problems whether this cache is disabled or not. If you keep the pre-caching enabled, you’ll see the memory issues that you’re currently seeing. If you disable the pre-caching, you’ll see an increase in the number of SQL queries performed when you do use those post meta fields (eg. in your theme).

So, on to disabling this pre-caching. It is controlled via the update_post_meta_cache query variable, which is set to true for all post queries by default. To disable it, you’ll need to target the queries you’re interested in and set it to false. Example:

function wpse_160203( WP_Query $wp_query ) {
    if ( 'property' == $wp_query->get( 'post_type' ) ) {
        $wp_query->set( 'update_post_meta_cache', false );
    }
}
if ( is_admin() ) {
    add_action( 'pre_get_posts', 'wpse_160203' );
}

This will prevent the pre-caching of post meta for the property post type in the admin area. If you want to do the same for the front end, simply remove the is_admin() conditional, but bear in mind you’ll see a sharp increase in SQL queries and probably not much of a drop in memory usage if you actually start using those 400 post meta fields.