是否有可能确定IIS7在ASP.NET中运行的托管管道?
我最近对不同的国际象棋引擎感兴趣.该领域有许多开放和封闭的资源项目.他们都是(大部分都是)用C/C++编写的.这是一个显而易见的事情 - 你有一个计算密集型的任务,你使用C/C++,所以你同时获得了可移植性和速度.这似乎是一个没有脑子的人.
但是,我想质疑这个想法.当.NET首次出现时,有很多人说.NET的想法不会起作用,因为.NET程序注定要超慢.实际上,这并没有发生.有人在VM,JIT等方面做得很好,现在我们在大多数任务中都有不错的表现.但不是所有的.微软从未承诺.NET适用于所有任务,并承认某些任务你仍然需要C/C++.
回到计算繁重的任务的问题 - 有没有办法编写.NET程序,以便它不会使用相同的算法执行比非托管代码更糟糕的计算?我对"不断"的速度损失感到满意,但是比这更糟糕的事情将成为一个问题.
你怎么看?我们能否接近托管代码中计算的非托管代码,或者非托管代码是唯一可行的答案?如果我们可以,怎么样?如果我们不能为什么?
更新:这里有很多好的反馈.我将接受最多投票的答案.
我正在制作一种脚本语言,但我有一个严重的问题。
我需要这样做,以便您可以在该语言中调用 .NET DLL,但我发现无法在 C# 中执行此操作。
有谁知道如何以编程方式加载和调用 .NET dll?(我不能只是添加参考所以不要这么说)
您知道用于托管应用程序的任何等效的 Microsoft Application Verifier 吗?
谢谢!
我现在正在学习很多关于托管和非托管解决方案的知识,我肯定会看到在生产中使用托管解决方案带来很多好处.
我看到推荐的模式是拥有一个开发环境,您可以在其中使用非托管解决方案,导出解决方案的非托管和托管版本,最后将托管解决方案部署到生产环境(可能首先用于测试的暂存环境).
这一切都非常好,干净,但并非没有陷阱.我最近遇到了以下情况:
我们使用上述模式为帐户实体创建和部署托管解决方案,并为客户安装.该解决方案包含用于与遗留系统集成的表单和其他一些内容
草图:
管理部分
场A场B.
场C场D.
在我不知情的情况下,客户继续使用"自定义"菜单自定义帐户表单.他所做的是创建一个新的表单部分,并将我们的托管解决方案中包含的一些自定义字段从原始部分移动到新部分
草图:
非管理部分
场A场B.
管理部分
场C场D.
由于这是一个非托管的更改,它优先于我的托管更改,破坏了对表单布局的破坏,而我做了一些其他更改(删除其他一些字段并更改表单上某些字段的顺序)
我当然尝试重新安装解决方案,同时使用"覆盖自定义"选项,该选项承诺覆盖对实体的非托管自定义,但这不会改变任何内容.
我还尝试删除新部分和作为非托管自定义移动的字段(使用自定义菜单),然后重新安装托管解决方案,希望这将以某种方式"撤消"非托管更改,并且diff机制将检测到有问题的字段仅出现在托管解决方案中,这将导致它们出现在原始位置.但事实证明,它似乎只是在雕刻更多的石头 - 这次告诉系统从表格中删除字段.
真的可以这样吗,一旦你对表单进行了非托管更改,你的托管表单就搞砸了?
有没有办法强制托管表单再次优先?
我当然可以对表单进行一些更多的非托管自定义,将字段放回原来的位置,但这只会推迟问题,直到下次我想要更改托管表单中字段的顺序 - 非托管更改来自上次仍然有优先权.
似乎我唯一的选择是从头开始,或者切换到帐户实体的非托管机制.
如果这看起来很糟糕,我应该使用托管属性来禁止在托管解决方案中对表单进行自定义.如果这是一个自定义实体,我会这样做,但我认为这对于像帐户实体这样的实体来说会有点严格.另一个经验教训可能是永远不会给客户sysadmin/customizer权限......
会喜欢这方面的其他想法和经验.
我试图从非托管代码调用托管方法.但是,托管代码要求我使用'(__ clrcall)调用约定,而我的非托管C++代码拒绝让我使用__clrcall调用约定而不使用/ clr选项.我不相信我想这样做,因为非托管项目不是我可以改为托管的.
正如我在CodeGuru和MSDN上看到的那样,我已经完成了在托管端构建所有这些委托和函数指针编组,但是除非我使用不能成为ref类成员的__stdcall约定调用静态函数,否则此错误仍然会弹出.该方法需要是ref类的实例.
我能解决这个问题的唯一方法是从程序集中的非托管代码执行我的方法调用,在调用之后跳过ESP寄存器(添加4)的弹出(调用在参数中有一个参数,因此'4 ").这让我有效地做了__clrcall.那个选项很难找到.
有人对如何解决这个问题有任何想法?肯定是可能的.我遗漏了一些简单而重要的信息.
这是我的委托定义(所有这些都属于单个ref类ManagedSensor):
delegate void OxpOnReceivedMeasurement(std::vector<OBX> *obxes);
Run Code Online (Sandbox Code Playgroud)
这是我想要调用的实例方法
void LocalOxpMeasurementCallback(std::vector<OBX> *obxes);
Run Code Online (Sandbox Code Playgroud)
这里是ref类函数对ref class构造函数中完成的非托管函数的编组:
// Now to make the 'delegate' unmanaged function pointer usable for unmanged code
// The argument is the unmanaged callback.
OxpOnReceivedMeasurement ^oxpMeasurementCallbackFP = gcnew OxpOnReceivedMeasurement(this, &ManagedSensor::LocalOxpMeasurementCallback);
// Lock it so the garbage collector doesnt get rid of it or move it
gch = GCHandle::Alloc(oxpMeasurementCallbackFP);
// Pass the marshaled function pointer to the unmanaged code
IntPtr ip = Marshal::GetFunctionPointerForDelegate(oxpMeasurementCallbackFP);
// fnOnReceiveMeasurement is defined …Run Code Online (Sandbox Code Playgroud) 我正在使用 Monitor 类来管理关键部分。但有时我会遇到SynchronizationLockException以下消息
An unhandled exception of type 'System.Threading.SynchronizationLockException' occurred in ManagedType.dll
Additional information: Object synchronization method was called from an unsynchronized block of code.
Run Code Online (Sandbox Code Playgroud)
我的代码在下面
Object^ lockObj = gcnew Object(); //Global variable
bool GetValue()
{
try
{
Monitor::Enter(lockObj);
return this.value;
}
finally
{
Monitor::Exit(lockObj);
}
}
Run Code Online (Sandbox Code Playgroud)
在SynchronizationLockException抛出时Monitor::Exit(lockObj)调用。
我已经在这个论坛和互联网上搜索过,但包括 MSDN 在内的大多数主题都说“当您尝试在 Monitor.Enter() 和 Monitor.Exit() 中使用值类型变量而不是引用类型时,将抛出此异常”。
但就我而言,我使用 lockObj 作为引用对象。所以我不知道为什么它会抛出这个异常。有人可以帮助我吗?
非常感谢,
T&T集团!
如何查看文件,如何查看VB.Net
C:\文件\将Test.exe
是.net二进制文件还是原生二进制文件?
我正在将C++代码移植到C#,我在C++代码中遇到了这个问题,
SHELLEXECUTEINFO shell;
memset(&shell, 0, sizeof(shell));
//the properties in shell are set
ShellExecuteEx(&shell);
Run Code Online (Sandbox Code Playgroud)
所以,现在我使用Process.Start(),并ProcessStartInfo为C#代码.ProcessStartInfo当我调用ProcessStartInfo构造函数时,是否必须为内存分配内存?只是为了满足我的好奇心,这种memset在C++ 中使用的方式是一种非托管语言的练习还是我理解错误的东西?
谢谢.