我终于尝试了我的WPF桌面应用程序的log4net.
我正在努力解决RollingFileAppender没有内置支持多实例应用程序的事实.
我不喜欢将应用程序限制为单个实例只是为了让logger满意.单一的手术技巧都是丑陋的黑客.
在日志文件的文件名中使用进程ID也不够好.这有可能占用无限空间,因为RollingFileAppender在这种情况下是无用的.
一种解决方案可能是将日志发送到不同的进程,这将负责将输出序列化为文件.但这会带来新的麻烦.
你对此有何看法?
我需要知道以下版本的SQL Server实例名称的最大字符长度(如果它们之间存在差异.)
(我正在开发一个应用程序,它将通过DMO/SMO API与SQL Server通信,并需要验证用户输入.)
经过大量谷歌搜索和BOL搜索后,我无法找到明确的答案.我找到了论坛问题和回复(在其他较小的网站上),但这些回复中的值范围从16到128个字符,没有提供支持文档或链接.
看起来这应该是一个简单的发现,但它没有我.任何帮助将非常感激.
我正在尝试执行与获取与字典中的最小值对应的键相同的操作 ,其中我们希望获得与字典中的最小值对应的键.
最好的方式似乎是:
min(d, key=d.get)
Run Code Online (Sandbox Code Playgroud)
但是我想在具有多个最小值的字典上应用它:
d = {'a' : 1, 'b' : 2, 'c' : 1}
Run Code Online (Sandbox Code Playgroud)
请注意,上面的答案是:
>>> min(d, key=d.get)
'a'
Run Code Online (Sandbox Code Playgroud)
但是,我需要两个具有最小值的键,即a和c.
什么是最好的方法?
(最终我想随机选择其中一个,但我不认为这是相关的).
有一个简单的Windows批处理文件,它运行多个应用程序实例:
start app.exe param1
start app.exe param2
Run Code Online (Sandbox Code Playgroud)
有没有办法同时异步运行它们(上面做的)并等待它们完成执行其他操作 - 类似于C#
Task.WhenAll(tasksList.ToArray());
/* Process tasksList.Result */
Run Code Online (Sandbox Code Playgroud)
?
/ wait开关在这里没有帮助,如果特定实例仍在运行,可能会进行一些轮询.
我们的应用程序在网络上运行,主要是一个查询工具,做一些交易.我们托管Oracle数据库.该应用程序始终为每个客户提供不同的Oracle实例.一个客户是支付我们提供我们的服务,该公司的员工,每个客户通常10,000-25,000名员工的公司.我们打算有几百个客户.我们每隔几年就会发布一次主要版本,并且迁移到新版本具有挑战性:我们可能会在客户站点组建一个团队几周,解释新功能并设置驱动数据以适应该客户.
我们正在考虑使用多客户端,将所有客户放在一个大型的"Windows Server 2008服务器"上的单个共享Oracle 11g实例中 - 以降低成本.我想知道这是否可取.
为每个客户提供单独的实例有一些优点.请告诉我这些是假的.我粗略猜测降低重要性:
我们的客户MyCorp和YourCo可以在对架构进行重大更改时单独迁移.(对于多客户端,我们将在一夜之间迁移300多个客户!?!)
MyCorp的数据可以轻松备份和(!!!)恢复,而不会影响其他客户.
MyCorp的数据与其竞争对手YourCo的数据安全地分开,而不依赖开发人员来获得正确的代码和/或DBA获得正确的配置.
多个实例风险较低,因为一个客户发生灾难(某人意外地将每个人的工资加倍,并且在发薪日后发现错误)不会影响其他客户.一场灾难影响了我们所有的客户(呐喊,新的DBA,突然每个参与者都拥有相同的SSN!?!)可能会让我们的公司陷入困境.
在一台服务器上安装一个实例会出现单点故障,如果飓风摧毁了建筑物,我们的整个客户群就会停止运营.多个服务器上的多个实例允许地理分散:没有灾难会影响我们客户的太大比例,而其他地区的未受影响的服务器可以承担故障服务器的负载.
性能更好,因为数据库较小(约50个表中的10,000对2,000,000行).
如果MyCorp的办公室(大部分)只在一个地区,那么MyCorp的实例可以在地理位置上共存,因此网络延迟不会影响性能.出于同样的原因,我们可以为全球客户提供更好的服务.
在MyCorp想要在内部使用他们的数据库,然后我们可以轻松导出他们的实例,以获得MyCorp他们的数据.
负载平衡更容易,因为实例可以放在不同的服务器上(这适用于Web场).
当需要DEV或QA实例时,克隆实际实例并对数据进行匿名化会更容易,因为数据要少得多.
因为它们足够小,开发人员可以让自己的实例在本地运行,这样他们就可以在机场等待的同时处理代码,而无需解决VPN麻烦.
Q1:单独实例的其他优点是什么?
我们正在考虑更改数据库架构并将所有客户合并到一个Oracle实例中,在一台大型服务器上运行.
以下是多客户端实例方法的优点,最重要的是首先(我的WAG).如果这些是假的,请狙击:
减少DBA的工作量,因为他们只需要维护一个实例而不是数百个实例.较少的DBA工作转化为更便宜,这是我们改变的主要动机.
只需一个实例,DBA就可以更好地优化性能.他们将有时间添加适当的索引并查看我们的SQL.
开发人员更容易调试和增强应用程序,因为只有一个模式和一个应用程序(如果有数百个实例,则可能有数十个模式版本,每个模式版本都有不同版本的应用程序).这也降低了成本.另一种方法是必须启动每个调试会话:(1)该客户运行的是什么版本;(2)让我们努力重新创建相应的开发环境,代码和数据库.(我们需要一个虚拟机,其中包含每个补丁和发布的代码AND数据库实例!)
许可Oracle更便宜,因为它的价格是每台服务器的价格而不管(或者某些东西 - 我对这个主题一无所知).
数据库成为Web会话数据的可行持久存储,因为只有一个实例.
使用一个多客户端实例可以更轻松地进行某些数据库操作,例如在他们朦胧地找到他们(或他们的配偶)可能工作的客户时找到参与者:所有名称都在一个表中.跨客户报告非常简单.
Q2:在一个实例中拥有多个客户端有哪些其他优势?
问题3:您认为哪种方法更好(为什么)?每个客户的实例,还是一个实例中的所有客户?
我担心有一个多客户端实例使迁移几乎不可能,这是一个交易杀手......
...除非有一个妥协的解决方案,比如有两个多客户端实例,旧的和新的.在这种情况下,我们将设计用于查找参与者,报告等的跨实例解决方案,以便客户可以从一个多客户端实例转到下一个实例,而不会出现任何问题.
如果已经有实例运行,我的应用程序在加载时需要表现得略有不同.
我理解如何使用互斥锁来防止其他实例加载,但这并不能解决我的问题.
例如:
有任何想法吗?值得庆幸的是,它不需要处理多个用户帐户或类似的东西.
(C#,桌面应用程序)
编辑:为了澄清,应用程序不需要限制为单个实例,只需执行一个稍微不同的启动操作,如果还有另一个实例已经运行.多个实例都很好(并且是预期的).
我需要在没有"-multiInst"参数的多实例模式下运行Notepad ++.我不能使用.lnk快捷方式,我不能使用cmd.exe /c notepad++.exe -multiInst,还有另外一种方法吗?
我安装了最新版本(2.30.1)的Gedit的用于Windows.每当我使用gedit从资源管理器打开文件时,它都不会在当前实例中作为选项卡打开,而是为每个文件打开一个新窗口,如记事本.我不喜欢这种行为.有没有办法配置gedit打开与标签相同的窗口中的文件?
我的项目中有一个接口,有2个类实现它:
public interface IService
{
int DoWork();
}
public class Service1:IService
{
public int DoWork()
{
return 1;
}
}
public class Service2:IService
{
public int DoWork()
{
return 2;
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个依赖于它的命令处理程序IService:
public CommandHandler1:ICommandHandler<CommandParameter1>
{
IService _service;
public CommandHandler1(IService service)
{
_service = service
}
public void Handle()
{
//do something
_service.DoWork();
//do something else
}
}
public interface ICommandHandler<TCommandParameter>
where TCommandParameter :ICommandParameter
{
void Handle(TCommandParameter parameter);
}
public interface ICommandParameter
{
}
Run Code Online (Sandbox Code Playgroud)
我想基于用户选择注入Service1或Service2 …
好的,所以我创建了我的c#应用程序,为它创建了一个安装程序,并在我的机器上安装了它.
问题是,当用户打开应用程序exe两次时,将运行两个应用程序实例.我只想要一个应用程序的一个实例随时运行,我该怎么做呢?
谢谢你的帮助,
c# ×4
.net ×2
batch-file ×1
c#-2.0 ×1
dictionary ×1
gedit ×1
log4net ×1
minimum ×1
mutex ×1
notepad++ ×1
oracle ×1
python ×1
settings ×1
sql-server ×1
structuremap ×1
tabs ×1
wait ×1
windows ×1