<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style id="owaParaStyle" type="text/css">P {margin-top:0;margin-bottom:0;}</style>
</head>
<body ocsi="0" fpstyle="1">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;">Hi,<br>
<br>
I'd like some guidance on how to free memory in an embedded Mono scenario. <br>
<br>
I 'monkeyed' a few things started from the embedded samples in the mono codebase, but they are limited to g_free calls on UTF8 strings. I think I figured out I needed to use mono_gchandle_new and mono_gchandle_free to 'pin' (resp. 'free') MonoObject from the
 embedding application when they re not in use anymore outside of the CLR. Nevertheless the fate of transient objects is a bit of a mystery.<br>
<br>
Say I have a C# function:<br>
public static object CreateInstance(string typename, object[] ctorArgs) <br>
<br>
Which I am calling from C with the code below. What should I do with the transient MonoArray 'ctor_params' before leaving the function? is mono_free to call in this case, or would the garbage collector do its job just fine as it is.<br>
<br>
{<br>
// snip<br>
    MonoArray* ctor_params = create_array_object(build_method_parameters(ctorParams), Rf_length(ctorParams));<br>
    MonoObject * exception, *result;<br>
    void** ci_p = (void**)malloc(2*sizeof(void*)); // The array of parameters for CreateInstance<br>
    ci_p[0] = create_mono_string(ns_qualified_typename);<br>
    ci_p[1] = ctor_params;<br>
    result = mono_runtime_invoke (method, NULL, ci_p, &exception);<br>
    print_if_exception(exception);<br>
    free(ci_p);<br>
// snip<br>
}<br>
<br>
<br>
</div>
</body>
</html>