-
Notifications
You must be signed in to change notification settings - Fork 228
Closed
Description
我原本是使用NatashaInitializer.Initialize();
使用是正常的,但是我每次调用构建都要2秒的时间,感觉太费时间了。
所以就想到了InitializeAndPreheating();,可是我调用这个就报错。
Natasha版本:3.1.0.0
测试代码和错误信息如下:
测试代码:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using Natasha.CSharp;
using System.Threading.Tasks;
namespace MyNameSpace
{
[TestClass()]
public class MyClassTest
{
[TestMethod()]
public void Natasha_测试()
{
//仅仅注册组件 这个初始化是可以正常使用的,就是每次都要2秒左右,很耗费时间。
NatashaInitializer.Initialize();
for (int i = 0; i < 10; i++)
{
var start = DateTime.Now;
Natasha测试一次();
Console.WriteLine($"第{i}次查询用时:{(DateTime.Now - start).TotalSeconds}秒");
}
}
[TestMethod()]
public async Task Natasha_测试Async()
{
//注册+预热组件 , 之后编译会更加快速 可是这个调用报错了,想知道我应该怎么做
await NatashaInitializer.InitializeAndPreheating();
for (int i = 0; i < 10; i++)
{
var start = DateTime.Now;
Natasha测试一次();
Console.WriteLine($"第{i}次查询用时:{(DateTime.Now - start).TotalSeconds}秒");
}
}
private void Natasha测试一次()
{
var newClassName = $"{nameof(BaseModel)}_{new Random().Next(int.MaxValue)}";
var action = FastMethodOperator.DefaultDomain(option =>
{
option.Add($@"
namespace MyNameSpace
{{
public class {newClassName} : {nameof(BaseModel)}
{{
public override string Name => ""OveName"";
}}
}}");
})
.Param(typeof(string), "inValue")
.Body($@"
var obj = new {newClassName}();
return obj.Show(inValue);
")
.Return<string>()
.Compile<Func<string, string>>();
var result = action("aaabbb");
Console.WriteLine($"result:{result}");
}
}
public class BaseModel
{
public virtual string Name => "BaseName";
public string Show(string inValue)
{
Console.WriteLine($"ClassName:{this.GetType().Name},Name:{Name},InValue:{inValue}");
return $"Result {inValue}";
}
}
}
错误信息:
Natasha_测试Async
源: ZzwTest.cs 行 24
持续时间: 2.1 秒
消息:
Test method MyNameSpace.MyClassTest.Natasha_测试Async threw exception:
Natasha.Error.NatashaException: 编译错误 : CS8021 找不到 RuntimeMetadataVersion 的值。找不到包含 System.Object 的程序集,或未通过选项为 RuntimeMetadataVersion 指定值。
堆栈跟踪:
AssemblyCSharpBuilder.GetAssembly()
AssemblyBuilderExtension.GetTypeFromShortName(AssemblyCSharpBuilder builder, String typeName)
AssemblyBuilderExtension.GetMethodFromShortName(AssemblyCSharpBuilder builder, String typeName, String methodName)
AssemblyBuilderExtension.GetDelegateFromShortName(AssemblyCSharpBuilder builder, String typeName, String methodName, Type delegateType, Object target)
AssemblyBuilderExtension.GetDelegateFromShortName[T](AssemblyCSharpBuilder builder, String typeName, String methodName, Object target)
MethodBuilder`1.Compile[S](Object target)
DelegateOperator`1.Delegate(String content, AssemblyCSharpBuilder builder, Action`1 option, Func`2 methodAction, Func`2 oopAction, NamespaceConverter[] usings)
NDelegate.Action(String content)
NatashaInitializer.InitializeAndPreheating(Boolean initializeReference)
MyClassTest.Natasha_测试Async() 行 27
ThreadOperations.ExecuteWithAbortSafety(Action action)
Originally posted by @zhangzw218 in #68
Metadata
Metadata
Assignees
Labels
No labels