我用 C# 编写了一个使用 SQLite 数据库的 .NET 应用程序。我想使用 LINQ to SQL 作为 ORM 来处理数据库。因此,出于这个原因,我的项目中安装了两个 nuget 包:System.Data.SQLite Core (x86/x64)和System.Data.SQLite LINQ。
以下是我的应用程序中的一些简化代码:
[Table]
public class Entity
{
[Column(IsPrimaryKey = true, IsDbGenerated = true, CanBeNull = false)]
public int Id { get; set; }
[Column]
public string Data { get; set; }
}
public class EntityDataContent : DataContext
{
public EntityDataContent(IDbConnection connection) : base(connection)
{
}
public Table<Entity> Entities
{
get { return GetTable<Entity>(); }
}
}
Run Code Online (Sandbox Code Playgroud)
为了从数据库获取数据,我使用以下代码:
SQLiteConnection connection …Run Code Online (Sandbox Code Playgroud) 我正在为Windows Phone开发一个应用程序.此应用程序使用后台代理(计划任务).
主应用程序借助IsolatedStorageSettings.ApplicationSettings存储一些设置.后台代理有时只能从设置中读取值.
问题是我应该使用Mutex来同步主应用程序和后台代理之间的IsolatedStorageSettings操作吗?或者在我的场景中不需要这个?
我试着理解Repository模式在我的应用程序中实现它.我在某种程度上坚持了它.
以下是应用程序访问数据的简化算法:
第一次应用程序没有数据.它需要连接到Web服务才能获取此数据.因此,与Web服务交互的所有低级逻辑都将隐藏在WebServiceRepository类之后.从Web服务传递到应用程序的所有数据都将被缓存.
下次应用程序将请求数据时,将在从Web服务请求数据之前在缓存中搜索此数据.Cache将自身表示为数据库和XML文件,并将通过CacheRepository.
缓存的数据可以处于三种状态:有效(可以向用户显示),无效(无法显示的旧数据)和部分有效(可以显示但必须尽快更新).
a)如果缓存的数据有效,那么在我们得到它们之后我们就可以停止了.
b)如果chached数据无效或部分有效,我们需要访问WebServiceRepository.如果对Web服务的访问成功结束,则所请求的数据将被缓存,然后将显示给用户(我认为这必须作为第二次调用实现CacheRepository).
c)因此数据访问的入口点是CacheRepository.仅当没有完全有效的缓存时才会调用Web服务.
我无法弄清楚在哪里放置验证缓存的逻辑(有效/无效/部分有效)?在哪里拨打电话WebServiceRepository?我认为Repositories,由于违反了SOLID的单一责任原则(SRP),因此不能将此逻辑置于任何人之中.
我应该实现某种RepositoryService并将所有逻辑放入其中吗?或者也许有一种方法可以链接WebServiceRepository和WebServiceRepository?
实现这些的模式和方法是什么?
另一个问题是如何从缓存中获取部分有效的数据,然后在一个方法的调用中请求Web服务?我认为使用代表和事件.还有其他方法吗?
请提出建议.链接上面列出的所有功能的正确方法是什么?
PS也许我描述的有点令人困惑.如果需要,我可以提供一些额外的说明.
PPS在CacheRepository(下WebServiceRepository)我的意思是一组库的- CustomerCacheRepository,ProductCacheRepository等等.谢谢@hacktick的评论.
我正在编写一个多线程解析器.解析器类如下.
public class Parser extends HTMLEditorKit.ParserCallback implements Runnable {
private static List<Station> itemList = Collections.synchronizedList(new ArrayList<Item>());
private boolean h2Tag = false;
private int count;
private static int threadCount = 0;
public static List<Item> parse() {
for (int i = 1; i <= 1000; i++) { //1000 of the same type of pages that need to parse
while (threadCount == 20) { //limit the number of simultaneous threads
try {
Thread.sleep(50);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
Thread thread …Run Code Online (Sandbox Code Playgroud) 在我的Windows Phone应用程序中,我Application.UnhandledException用来捕获所有未处理的错误.如果发生这种错误,那么我的应用程序会显示一个简单MessageBox的请求,通过电子邮件向开发人员发送错误报告.它看起来像这样:
protected virtual void OnUnhandledException(
object sender, ApplicationUnhandledExceptionEventArgs e)
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
var result = MessageBox.Show(
"Would you like to send a report to developers?",
"Error",
MessageBoxButton.OKCancel);
if (result == MessageBoxResult.OK)
{
var task = new EmailComposeTask();
task.To = "feedback@site.com";
task.Subject = "Error";
task.Body =
e.ExceptionObject + "\n" + e.ExceptionObject.StackTrace;
task.Show();
e.Handled = true;
}
});
}
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,一切正常.
但许多用户抱怨说,有时应用程序只是崩溃而没有消息.我在开发人员的仪表板中有一些崩溃报告,但这些报告只有非常少量的有用信息.我无法理解什么样的错误会导致这种情况.我只假设在一个后台线程中发生了一些错误.
是Application.UnhandledException正常工作在所有情况下?一些例外是否仍然未得到处理?在上述情况下可以做些什么?
谢谢.
从文档中我意识到我可以使用Caliburn Micro的协同程序进行异步操作.开箱即用,没有额外的技术.所以我在Windows Phone应用程序中实现了下一个代码:
public class SimpleViewModel : Screen
{
// ...
protected override void OnViewLoaded(object view)
{
base.OnViewLoaded(view);
Coroutine.BeginExecute(RunTask());
}
public IEnumerator<IResult> RunTask()
{
yield return new SimpleTask();
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
SimpleTask:
public class SimpleTask : IResult
{
public void Execute(ActionExecutionContext context)
{
Thread.Sleep(10000);
}
public event EventHandler<ResultCompletionEventArgs> Completed;
}
Run Code Online (Sandbox Code Playgroud)
我希望Execute方法中的代码将运行异步.但这不会发生.我的UI线程被阻止了10秒钟.
我犯了哪个错误?或者我对协同程序的异步性质的假设是错误的?
c# ×5
.net ×2
android ×1
asynchronous ×1
caching ×1
coroutine ×1
java ×1
linq-to-sql ×1
mutex ×1
parsing ×1
sqlite ×1
web-services ×1