本机共享库中的静态变量

我正在使用我为“测试”而编写的该库,尤其是为了了解静态变量在本机环境中的工作方式。我不是C#经验丰富的人,我的问题可能只是显而易见的(我希望不是...)。

所以,我主要用C语言编写了一个包装器,目的是加载共享库并调用特定的方法。 C#代码定义了一个静态SortedList,该列表在从C程序到C#库的多次调用中得到更新(我正在使用corert进行编译)。如您所见,C#库从创建的任务中更新静态变量。

例如,在此处明确指出“多次调用相同的dll”将重置所有静态变量。

Is a static variable in a library (DLL) shared by all processes referencing that library?

也许我弄错了,但我真的不明白为什么在我的情况下,静态变量只停留在那儿,即使我多次调用同一个库也没有重新初始化它的内容。

def custom_lemmatizer(df,input_col,output_col) -> DataFrame:
  """
      Lemmatizes the df's using input_column and returns
      a df with lemmatized words as output_column
  """
  input_col = udf(lambda x: " ".join(x))(df[input_col])
  def spacy_lemma(input_col)->list:
    nlp = spacy.load('en',disable=['parser','ner'])
    doc = nlp(input_col)
    return [token.lemma_ for token in doc]

  spacy_udf = udf(lambda string: spacy_lemma(string),ArrayType(StringType()))
  return df.withColumn(output_col,spacy_udf(input_col))
namespace AsyncTicker
{

    class asyncTicker
    {
        public static SortedList< int,string > TryDict = new SortedList<int,string>();

        [NativeCallable(EntryPoint = "RVExtension",CallingConvention = CallingConvention.StdCall)]
        public static void RVExtension()
        {
            string conteggio = Convert.ToString(TryDict.Count);

            if (TryDict.Count > 0) {
                conteggio += " || Value of last element is:" + TryDict.Values[TryDict.Count - 1];
            }
            Executetask();
            Console.WriteLine(conteggio);
        }

        public static void Executetask()
        {
            Task t1 = Task.Factory.StartNew(() =>
            {
                    Random tmp = new Random();
                    int val = tmp.Next(100);
                    TryDict.Add(val,String.Format("test{0}",val));

            });
        }
    }
}

如您所见,我还尝试多次加载该库,以查看TryDict变量是否将被重置...并且只要我保持C'invoker'运行,它的值就一直保持在那里。在提到的问题中,明确指出,在库的每次调用中都会创建一个AppDomain,然后将其销毁...所以为什么不是这种情况?

谢谢大家。我只想得到一个解释,以便更好地理解为什么这样做。

p.s:很抱歉提供了如此多的代码行

这是输出

本机共享库中的静态变量

moon_zero 回答:本机共享库中的静态变量

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3144503.html

大家都在问